2016-07-12 8 views
0

Das ist mein Logindata Modell Klasse:Wie erstellt man die Instanz der Klasse mit der Methode init() in Swift?

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

I-Instanz für die Klasse in der folgenden Klasse erstellen möchten:

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

Versuchen Sie, wie diese 'var objLoginData = Logindata (fromJson: json)' [Weitere Infos] (http://www.tutorialspoint.com/swift/swift_initialization.htm) – Chandan

+1

, die eine sehr verwirrende Gestaltung der ist Initialisierer. Entweder erstellen Sie einen fehlgeleiteten Initialisierer ('init? (...') gibt 'nil' bei einem Fehler zurück oder überprüft den JSON vor dem Erstellen der Instanz und verwendet nicht-optionale Typen. – vadian

+0

Wenn ich das versuche var objLoginData = LoginData (fromJson: json), Muss ich das json .... @ Chandan Prajapati – GuganReddy

Antwort

1

Wie andere erwähnt haben, diese initializer failable sein sollte. sessionToken muss nicht mehr implizit als Option ausgepackt werden (String!). Ich habe den Code auch nach Swift's Konvention formatiert.

class LoginData { 
    var sessionToken: String 

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

     self.sessionToken = sessionToken 
    } 
} 

dann instanziiert es mit:

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

//use loginData 

Sie Muss Aufruf der Initialisierer mit dem json Parameter, weil es keine Initialisierer ist, die ohne Parameter vorhanden ist.

+0

das ist nicht, weil 'stringValue' der nicht kompiliert' SwiftyJSON' Bibliothek ist nicht optional – vadian

+0

@vadian Oh okay. Könnten Sie es bitte entsprechend bearbeiten? – Alexander

+0

Sorry, ich bearbeite den Code in den Posts anderer nicht grundlegend und es ist in diesem Fall schwierig, da der übergebene JSON laut der Anfrage des OP optional sein soll. – vadian

Verwandte Themen