通过 Alamofire + Swift 2 发布参数的语法

Posted

技术标签:

【中文标题】通过 Alamofire + Swift 2 发布参数的语法【英文标题】:Syntax for POSTing Parameters via Alamofire + Swift 2 【发布时间】:2016-03-15 23:18:04 【问题描述】:

错误显示:“可选类型字符串的值?未包装。您的意思是使用!还是?”。尝试通过 Xcode 纠正错误并不能解决问题。

import Alamofire
import UIKit

class SignUpViewController: UIViewController   

    @IBOutlet weak var usernametextfield: UITextField!
    @IBOutlet weak var passwordtextfield: UITextField!
    @IBOutlet weak var emailtextfield: UITextField!

    override func viewDidLoad() 
            super.viewDidLoad()
            let usernameInput = self.usernametextfield.text
            let passwordInput = self.passwordtextfield.text
            let emailInput = self.emailtextfield.text

            // thanks Michael
            let parameters : [ String : AnyObject?] = ["hashword":passwordInput, "email":emailInput, "username":usernameInput]

            // but now..
            Alamofire.request(.POST, "http://my-ip/api/users", parameters:parameters).responseJSON  (_, _, JSON, _) -> Void in 

编辑:更进一步,但下一行说:无法将类型“[String : AnyObject?]”的值转换为预期的参数类型“[String : AnyObject]?”

视图确实加载块的最后几行代码是:

    Alamofire.request(.POST, "http://my-ip/api/users", parameters: ["foo": "bar"])
    let translatedText: String? = JSON?.valueForKeyPath("responseData.translatedText") as String?

【问题讨论】:

【参考方案1】:

您已将参数声明为AnyObject,但您正试图将 Optionals 放入其中。您可以将! 放在可选变量上(UITextField.text 是可选字符串):

let parameters : [ String : AnyObject] = ["hashword":passwordInput!, "email":emailInput!, "username":usernameInput!]

请注意,如果其中任何一个包含 nil,这将崩溃。

另外,由于您的所有参数都是可选字符串,您可以声明相同的参数:

let parameters : [ String : String?] = ["hashword":passwordInput, "email":emailInput, "username":usernameInput]

编辑:由于您使用的 Alamofire 需要将参数定义为 [String : AnyObject]?,因此您可以使用:

let parameters : [ String : AnyObject] = ["hashword":passwordInput ?? "", "email":emailInput ?? "", "username":usernameInput ?? ""]

如果不是 nil,这将使用值(例如 passwordInput),否则使用空字符串。

【讨论】:

以上是关于通过 Alamofire + Swift 2 发布参数的语法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire (Swift 2.2) 获取 Twitter 访问令牌

iOS Swift 2 - 失败时的 Alamofire 打印响应值

Swift 中 AlamoFire 的 Youtube API

curl -L 通过 Alamofire for Swift 3 从 Box 获取文件内容

通过使用 Alamofire 和解码获取 JSON - Swift 4

如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)