【问题标题】:Cannot convert value of type 'String?' (Alamofire)无法转换“字符串”类型的值? (阿拉莫菲尔)
【发布时间】:2016-12-06 13:39:53
【问题描述】:

我用对象映射器映射我的类用户:

class User: Mappable{

private var _username: String! = nil
private var _password: String! = nil
private var _firstName: String! = nil
private var _lastName: String! = nil

//here are getters and setters(it takes too much space)

init(){

}

required init?(_ map: Map) {

}

func mapping(map: Map) {

    username <- map["USERNAME"]
    password <- map["PASSWORD"]
    firstName <- map["FIRST_NAME"]
    lastName <- map["LAST_NAME"]

  }
}

然后我尝试创建新用户并输入一些值,映射整个对象并像这样使用 Alamofire 发送:

let userEmail = userEmailField.text!
let userPassword = userPasswordField.text!

let user = User()
user.username = userEmail
user.password = userPassword
let JSONString = Mapper().toJSONString(user, prettyPrint: true)

AlamofireService.alamofireService.makePostServiceRequest(URL_BASE, parameters: JSONString, resposeCallback: self)

我按照库的说明进行操作,但出现错误“无法转换 'String 类型的值?'到预期的参数类型'[String : AnyObject]'”,为什么?

【问题讨论】:

  • 您收到的错误是什么?
  • @MatanLachmish 对不起,我忘了写。我编辑我的问题。
  • 将私有实例变量与 getter 和 setter 一起使用是什么意思?这是斯威夫特!在 init 方法中隐式展开的选项是什么意思?值可以是nil,然后将它们声明为 real 可选的,或者如果它们从不是nil,则将它们声明为非可选的。

标签: swift alamofire objectmapper


【解决方案1】:

Alamofire 请求采用 [String: AnyObject] 格式的参数,因此您只需将字典作为参数传递。在您的情况下,您只需要:

let userEmail = userEmailField.text!
let userPassword = userPasswordField.text!

var dictParameter: Dictionary<String, AnyObject> = [:]
dictParameter["USERNAME"]   = userEmail
dictParameter["PASSWORD"]   = userPassword

然后提出请求:

AlamofireService.alamofireService.makePostServiceRequest(URL_BASE, parameters: dictParameter, resposeCallback: self)

【讨论】:

  • 处理响应的最佳方法是 Alamofire 对象映射器,对吧?
  • 如果我必须发送一个对象怎么办?因为我要发送的信息太多,输入字典太复杂?
  • 不错的答案兄弟。 :) +1
【解决方案2】:

您不需要将参数转换为字符串,只需将参数作为字典传递给 Alamofire。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多