我想传递一个nil值,即可选参数值之一。并且必须在 Alamofire Post请求中继续使用nil值。如果您告诉我下一步该怎么办,会有帮助吗?
let image: UIImage = UIImage()
let imageData = UIImagePNGRepresentation(image)
let base64String = imageData?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
let parameters = [
"first_name": "XXXXX",
"email" : "1234@gmail.com",
"password" : "password",
"profile_picture" : base64String]
Alamofire.request(.POST, "http://abc/public/user/register", parameters: parameters, encoding: .JSON, headers: nil)
.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
print(totalBytesWritten)
// This closure is NOT called on the main queue for performance
// reasons. To update your ui, dispatch to the main queue.
dispatch_async(dispatch_get_main_queue()) {
print("Total bytes written on main queue: \(totalBytesWritten)")
}
}
.responseJSON { response in
debugPrint(response)
}
即使 profile_pictures 为空,响应也会成功。我知道可以通过可选链接来完成,但不知道如何继续!!
答案 0 :(得分:7)
通过传递nil或未初始化的可选参数Server将获得Optional
您可以将NSNull()传递给字典
试试这个,比如
var params = ["paramA","valueA"] if imageBase64 == nil { parms["image"] = NSNull()} else { params["image"] = imageBase64 }
swiftyjson也将null作为NSNull
处理这里也有很好的参考 null / nil in swift language
答案 1 :(得分:1)
我认为您最简单的答案是添加"profile_picture"
作为第二步。
var parameters = [
"first_name": "XXXXX",
"email" : "1234@gmail.com",
"password" : "password"]
if let base64String = base64String where !base64String.isEmpty {
parameters["profile_picture"] = base64String
}
答案 2 :(得分:-1)
希望这会对你有所帮助:)。
var parameters :[String : AnyObject?] = [
"first_name": "XXXXX",
"email" : "1234@gmail.com",
"password" : "password"]
if let string = base64String where base64String.isEmpty != false {
parameters["profile_picture"] = string
}
答案 3 :(得分:-1)
经过深入研究后,我发现可以通过可选的链接和类型转换轻松完成。
第一步是按类型将参数分为字符串和图像,并检查字符串值和图像值的可用性。
let parameters: [String : AnyObject? ] = [
"first_name": "XXXXX",
"email" : "1234@gmail.com",
"password" : "password",
"profile_pic" : UIImage(named: "logo")]
在请求方法
中这样做for (key, value) in parameters {
if let value1 = value as? String {
multipartFormData.appendBodyPart(data: value1.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}
if let value1 = value as? UIImage {
let imageData = UIImageJPEGRepresentation(value1, 1)
multipartFormData.appendBodyPart(data: imageData!, name: key, fileName: "logo.png" , mimeType: "image/png")
}
您不必将参数拆分为两个,一个用于字符串值,另一个用于图像,也无需将图像转换为字符串。希望这个解决方案有所帮助!!