【问题标题】:How add Int value to the Alamofire upload parameters如何将 Int 值添加到 Alamofire 上传参数
【发布时间】:2016-09-20 17:21:11
【问题描述】:

我想将Int 值添加到multipartFormData

Alamofire.upload(.POST,
                 url,
                 headers: headers,
                 multipartFormData: { multipartFormData in
                    //add some jpg image
                    //add other vaues:
                    for (key, value) in parameters {
                        if value is String {
                            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
                        } else if value is Int {
                            let convertedValueNumber: NSNumber = NSNumber(int: value.intValue)
                            let data = NSKeyedArchiver.archivedDataWithRootObject(convertedValueNumber)
                            multipartFormData.appendBodyPart(data: data, name: key)
                        }
                    }

    }, encodingCompletion: { encodingResult in
      //some processing
})

但是服务器返回错误,我没有发送Int 值。如何在参数中添加Int 值?

【问题讨论】:

  • 您可以选择将类型转换为字符串。
  • 你的服务器真的期待NSKeyedArchiver二进制plist?!?大多数情况下,服务器只期望数字值的字符串表示形式。
  • @Rob 我尝试在没有 NSKeyedArchiver 的情况下进行转换 我使用了 let data = NSData(bytes: &vInt, length: sizeof(Int)) multipartFormData.appendBodyPart(data: data, name: key) 而这没有帮助
  • 您的服务器真的需要二进制有效负载吗?通常它是字符串表示形式(例如,使用字符串插值,"\(value)")。

标签: json swift int nsdata alamofire


【解决方案1】:

NSKeyedArchiver 很好奇。通常你只需发送字符串表示,例如:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in
    //add some jpg image
    //add other values:
    for (key, value) in parameters {
        if value is String {
            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        } else if value is Int {
            multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        }
    }
}, encodingCompletion: { encodingResult in
    //some processing
})

或者,甚至更简单,因为字符串插值适用于 StringInt

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in
    //add some jpg image
    //add other values:
    for (key, value) in parameters {
        if value is String || value is Int {
            multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        }
    }
}, encodingCompletion: { encodingResult in
    //some processing
})

或者,在 Alamofire 4 和 Swift 3 中:

Alamofire.upload(multipartFormData: { multipartFormData in
    //add some jpg image
    //add other values:
    for (key, value) in parameters {
        if value is String || value is Int {
            multipartFormData.append("\(value)".data(using: .utf8)!, withName: key)
        }
    }
}, to: url, method: .post, headers: headers, encodingCompletion: { encodingResult in
    //some processing
})

【讨论】:

  • 谢谢,但我有一个问题,如果值可以是 [String],[String:Any] ... 如果可以有多种类型,那么我应该为每种类型创建 is 块吗?
  • 或者你可以有一个接受两种排列的单一方法,例如Any?参数,然后执行if let parameters = parameters as? [String] { ... } else if let parameters = parameters as? [String: String] { ... },或其他。
猜你喜欢
  • 2017-10-21
  • 2017-09-03
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
相关资源
最近更新 更多