2016-07-12 8 views
0

は、これは私のLoginDataモデルクラスです:Swiftでinit()メソッドを持つクラスのインスタンスを作成するには?

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

この 'VAR objLoginData = LoginDataのように試してみてください(fromJson:JSON)' [詳細情報について](http://www.tutorialspoint.com/swift/swift_initialization.htm)の非常に混乱デザインだ – Chandan

+1

を初期化子。失敗時に 'nil'を返すfailsイニシャライザ(' init?(... '))を作成するか、インスタンスを作成する前に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

を初期化することができますSwiftyJSON'ライブラリはオプションではありません – vadian

+0

@vadianああ。それに応じてそれを編集できますか? – Alexander

+0

申し訳ありませんが、私は基本的に他の投稿のコードを編集しません。この場合、OPの要求に従って、渡されたJSONはオプションであると考えられます。 – vadian

関連する問題