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

时间:2016-03-15 23:18:04

标签: swift alamofire

错误显示:“可选类型字符串的值?已解包。您是不是要使用!或?”。试图通过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 个答案:

答案 0 :(得分:3)

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

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

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

或者,由于所有参数都是可选字符串,因此您可以声明参数相同:

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

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

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

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