2016-08-01 110 views
1

我我的类用户地图与对象映射:无法转换'String?'类型的值(Alamofire)

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:AnyObject]'“,为什么?

+0

什么是您会收到错误? –

+0

@MatanLachmish对不起,我忘了写。我编辑我的问题。 –

+0

使用私有实例变量与getter和setters是什么意思?这是Swift! init方法中的隐式unwrapped option是什么意思?这两个值都可以是“nil”,然后将它们声明为** real **可选,或者如果它们从不'nil'则将它们声明为非可选。 – vadian

回答

4

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) 
+0

处理响应的最佳方法是Alamofire对象映射器,对吗? –

+0

是的,我认为它与Object Mapper一起工作的良好做法! –

+0

如果我必须发送一个对象呢?因为我必须发送太多的信息,并且输入字典太复杂了? –

0

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

相关问题