Swift 使用ObjectMapper时调用中的参数标签不正确

Swift 使用ObjectMapper时调用中的参数标签不正确,swift,swift3,Swift,Swift3,我正在使用它将模型对象(类和结构)转换为JSON和JSON 当我尝试创建这样一个实例时,让person=person(用户名:“name”,年龄:24),我会遇到如下错误: 调用中的参数标签不正确 和额外的参数调用 我相信这与结构初始化的方式有关,我如何解决这个问题 import ObjectMapper func viewDidLoad(){ super.viewDidLoad() let person = Person(username: "name", ag

我正在使用它将模型对象(类和结构)转换为JSON和JSON

当我尝试创建这样一个实例时,
让person=person(用户名:“name”,年龄:24)
,我会遇到如下错误:

调用中的参数标签不正确

和额外的参数调用

我相信这与结构初始化的方式有关,我如何解决这个问题

import ObjectMapper

func viewDidLoad(){
  super.viewDidLoad()

  let person = Person(username: "name", age: 24)
}


struct Person: Mappable {
  var username: String?
  var age: Int?

  init?(map: Map) {    //To conform to Mappable class of ObjectMapper
    
  }

  // Mappable
  mutating func mapping(map: Map) {
    username    <- map["username"]
    age         <- map["age"]
    
  }

}
导入对象映射器
func viewDidLoad(){
super.viewDidLoad()
let person=人(用户名:“姓名”,年龄:24岁)
}
结构人:可映射{
var用户名:字符串?
变量年龄:Int?
init?(map:map){//以符合ObjectMapper的可映射类
}
//可映射
变异函数映射(映射:映射){

username您必须创建如下实例:

如果要对可映射类使用默认的
init

let jsonString = "{\"username\":\"username\",\"age\":20}"
let person = Person(JSONString: jsonString) // here you have to send json string as parameter
print(person?.username) // Outputs : Optional("username")
print(person?.age) // Outputs : Optional(20)

似乎您正在尝试使用Person的Syntheticed memberwise初始值设定项。但是,由于您显式定义了另一个初始值设定项,编译器没有合成memberwise初始值设定项,因此您需要手动执行此操作

struct Person: Mappable {
    var userName: String?
    var age: Int?

    init(userName:String? = nil, age:Int? = nil){
        self.userName = userName
        self.age = age
    }

    init?(map: Map) {    //To conform to Mappable class of ObjectMapper

    }

    // Mappable
    mutating func mapping(map: Map) {
        username    <- map["username"]
        age         <- map["age"]

    }
}

这个初始值设定项只是一个例子,在您的实际应用程序中,我想您实际上希望至少
userName
具有非nil值,因此您应该将声明更改为非可选,并相应地更改初始值设定项。

我对该库或其
Map
类一无所知,但您的
Person
init
方法使用一个名为
map
的参数,而不是两个名为
username
age
的参数。似乎您正在尝试使用
Person
的Synthesited memberwised初始值设定项。但是,由于您显式定义了另一个初始值设定项,编译器没有合成memberwise初始值设定项,因此您将需要手动操作。当我添加一个额外的初始化器
init(username:String,age:Int){}
时,错误被消除了。我相信这是可以的?@user44776是你的
定义
可以使用
nil
名称和年龄吗?如果可以,那么当然可以
let person = Person(userName: "name", age: 24)
let nameless = Person(age: 20)
let ageless = Person(userName: "name")