2016-07-12 4 views
0

Это мой LoginData Модель Класс:Как создать экземпляр класса, имеющего метод init() в Swift?

class LoginData 
{ 
    var sessionToken : String! 
    init(fromJson json: JSON!) 
    { 
    if json == nil 
    { 
     return 
    } 
    sessionToken = json["Session_Token"].stringValue 
    } 
} 

Я хочу, чтобы создать экземпляр для класса ниже класса:

class Confirm 
{ 
var modelobj = model() 
    // If I used to create instance I got error like this(**Missing argument for parameter 'fromJson' in call**) and how to create instance for this class 

} 
+0

Попробуйте как этот 'вар objLoginData = LoginData (fromJson: JSON)' [Для получения дополнительной информации] (http://www.tutorialspoint.com/swift/swift_initialization.htm) – Chandan

+1

Это очень запутанную конструкцию из инициализатор. Либо создайте отказоустойчивый инициализатор ('init? (...'), возвращающий 'nil' при сбое, либо проверяя JSON перед созданием экземпляра и используем необязательные типы. – vadian

+0

Если я попытаюсь сделать это var objLoginData = LoginData (fromJson: json), Мне нужно объявить json .... @ Chandan Prajapati – GuganReddy

ответ

1

Как уже упоминалось, этот инициализатор должен быть failable. sessionToken больше не должно быть неявно развернутым необязательным (String!). Я также отформатировал код для соглашения Swift.

class LoginData { 
    var sessionToken: String 

    init?(fromJson json: JSON) { 
     guard let sessionToken = json["Session_Token"].stringValue else { 
      return nil 
     } 

     self.sessionToken = sessionToken 
    } 
} 

затем создать его экземпляр с:

guard let loginData = LoginData(fromJson: someJson) else { 
    //Initializer failed. Recover from error here. 
    //Must break, return, or call @noreturn function 
} 

//use loginData 

Вы обязательно вызов инициализатор с параметром JSon, потому что нет инициализатора, что существует без каких-либо параметров.

+0

Это не компилировать, потому что 'stringValue' из' Библиотека SwiftyJSON не является необязательной – vadian

+0

@vadian О, хорошо. Не могли бы вы отредактировать его, пожалуйста? – Alexander

+0

Извините, я не редактирую код в других сообщениях принципиально, и это сложно в этом случае, потому что, согласно запросу OP, переданный JSON должен быть факультативным. – vadian