2016-03-23 15 views
0

与えられたタイプのオブジェクトをインスタンス化したいと思います。ここで与えられたタイプのオブジェクトをインスタンス化する方法

buildObjetFromType("data", typeClass: User.self) 

機能コードです:

public class User { 
    private var id:String? 
    private var login:String? 
    private var pwd:String? 
    private var nom:String? 
    private var prenom:String? 

    public required init(){ 
     id = "" 
     login = "" 
     pwd = "" 
     nom = "" 
     prenom = "" 
    } 

    public convenience init(_login: String, _pwd: String){ 
     self.init() 
     login = _login 
     pwd = _pwd 
    } 

    public convenience init(_id: String, _login: String, _pwd: String, _nom: String, _prenom: String){ 
     self.init(_login: _login, _pwd: _pwd) 
     id = _id 
     nom = _nom 
     prenom = _prenom 
    } 
} 
+0

ここでオブジェクトをインスタンス化しますか? 'var object:T?'は単に 'nil'を返します。どこかで 'init'メソッドを呼び出す必要があります。 – vadian

+0

私は「T.Typeとしてのオブジェクト」と思っていますか、間違っていますか? 「T」が –

答えて

2

参照:Instantiate an object of a generic type in Swift

すべてのクラスあなたと仮定すると

public static func buildObjectFromType<T>(data: String, typeClass: T.Type) -> T{ 

    print(typeClass) // will print "User" 
    var object:T? 

    object as! T.Type // cast the object into an User -> NOT WORKING ! 

    // fill the object with the data, knowing 
    // return the object once it has been filled with the data. 
} 

はここに私のUserクラスです。ここ関数の呼び出しです引数なしで必要なイニシャライザをインスタンス化したい(あなたがそれらを継承することを望むかもしれない同じ基底クラスを使用し、この要件を関数に追加する場合)は、次のようにすることができます。

static func instantiate<T where T: BaseClass>(data: String, cls: T.Type) -> T { 
    let obj = T() 
    // do something with obj and data 
} 
+0

であることがわからないため、T.init()が機能しません。別のスタックオーバーフローの質問から重複した回答を投稿するのではなく、この質問に重複してフラグを立てる必要があります。 – JAL

+0

これは可能性があるとしましょう。私はどのようにBaseClassのサブクラスを呼び出しますか? –

関連する問題