2015-11-01 2 views
15

Простая вещь, которая дает мне головную боль - как инициализировать объект, который соответствует отображаемому протоколу, без какого-либо JSON.ObjectMapper - инициализировать объект IOS

Что я хотел бы сделать, это просто инициализирует пустой объект пользователя в коде следующим образом:

let user = User() 

однако, что дает мне ошибку: «отсутствует аргумент для параметра # 1 в вызове»

Я смог сделать это в версии 0.14 с помощью swift 1.2, но теперь он не работает. Вы, ребята, знаете, как это сделать сейчас в Swift 2 и новом объекте Mapper? (Я знаю, как инициализировать его с JSON и т.д., я просто хочу, чтобы инициализировать этот объект для других целей, и я не могу понять, как)

class User: Mappable { 
var username: String? 
var age: Int? 
var weight: Double! 
var array: [AnyObject]? 
var dictionary: [String : AnyObject] = [:] 
var bestFriend: User?      // Nested User object 
var friends: [User]?      // Array of Users 
var birthday: NSDate? 

required init?(_ map: Map) { 

} 

// Mappable 
func mapping(map: Map) { 
    username <- map["username"] 
    age   <- map["age"] 
    weight  <- map["weight"] 
    array  <- map["arr"] 
    dictionary <- map["dict"] 
    bestFriend <- map["best_friend"] 
    friends  <- map["friends"] 
    birthday <- (map["birthday"], DateTransform()) 
} 
} 

, пожалуйста, помогите!

ответ

19

Следующая должно работать:

class User: NSObject, Mappable { 
var username: String? 
var age: Int? 
var weight: Double! 
var array: [AnyObject]? 
var dictionary: [String : AnyObject] = [:] 
var bestFriend: User?      // Nested User object 
var friends: [User]?      // Array of Users 
var birthday: NSDate? 

override init() { 
    super.init() 
} 

convenience required init?(_ map: Map) { 
    self.init() 
} 

// Mappable 
func mapping(map: Map) { 
    username <- map["username"] 
    age   <- map["age"] 
    weight  <- map["weight"] 
    array  <- map["arr"] 
    dictionary <- map["dict"] 
    bestFriend <- map["best_friend"] 
    friends  <- map["friends"] 
    birthday <- (map["birthday"], DateTransform()) 
} 
} 
+1

2 ошибки: на переопределения инициализации() «Initilaizer не отменяет назначенный инициализатору из суперкласса», рядом error on self.init() -> «Значение типа« _ -> _ »не имеет элемента« init » – Ammo

+0

У меня таких ошибок нет. pod 'ObjectMapper', '~> 1.0'; Swift 2.1. может попытаться удалить переопределить init() {super.init()}. –

+0

@SergeyDemchenko Я получил ту же ошибку, что и Ammo, и удалил override init() побеждает цель. ObjectMapper 1.2 Swift 2.2 – Questioner

7

исправленная версия выше ответ:

init() {} 
required convenience init?(_ map: Map) { self.init() } 
Смежные вопросы