2017-09-18 3 views
0

ObjectMapperを使用して、モデルオブジェクト(クラスおよび構造体)をJSONとの間で変換しています。ObjectMapperを使用しているときに呼び出し時の引数ラベルが正しくありません

私はこのlet person = Person(username: "name", age: 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"] 

    } 

} 
+3

私はライブラリやそのMapクラスについては何も知らないが、 'Person'クラスの' init'メソッドは 'username'と' age'という名前ではなく 'map'という名前の1つのパラメータをとります。 – rmaddy

+2

あなたが 'Person'の合成されたmemberwised初期化子を使用しようとしているようです。しかし、別のイニシャライザを明示的に定義したため、コンパイラはメンバワイズイニシャライザを合成しなかったため、手動で行う必要があります。 –

+0

余分な初期設定子 'init(username:String、age:Int){}'を追加すると、エラーは消えます。 – user44776

答えて

1

のデフォルトinitを使用したい場合人。しかし、別のイニシャライザを明示的に定義したため、コンパイラはメンバワイズイニシャライザを合成しなかったため、手動で行う必要があります。

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"] 

    } 
} 

ユーザ名のみを使用して初期設定を呼び出すことができます。デフォルト値のために、年齢または両方が使用できます。

let person = Person(userName: "name", age: 24) 
let nameless = Person(age: 20) 
let ageless = Person(userName: "name") 

この初期化子は、あなたの実際のアプリケーションでは、一例であり、私はあなたが非オプションであることを宣言を変更し、それに応じて初期化子を変更する必要がありますので、あなたが実際に、少なくともuserNameが非nilの値を持つようにしたいと思います。

0

は、あなたは以下のようなインスタンスを作成する必要があります。

あなたがのsynthetised memberwised初期化子を使用しようとしているように思えMappableクラス

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) 
関連する問題