2017-04-03 100 views
1

我需要寫是這樣的:將類作爲參數傳遞給函數,該函數在swift中返回此類型的對象?

func createInstanceOfClass(someClass: Class) -> UIViewController { 
    var vc = someClass() 

    //some initialization 
    ... 
    // 

    return 
} 

我發現了一些類似的問題,但他們中的一些不適合這個任務,一些關於PARAM T這似乎是多餘的。

+0

您的函數正在返回ViewController。那是什麼? –

+0

固定代碼。簡單地說,在我的特定情況下,此方法根據給定視圖控制器的類創建並初始化視圖控制器。 –

+0

你需要的是一個通用函數,這就是爲什麼你找到的答案使用'T'參數。我建議閱讀Swift中的泛型,然後再看看你找到的答案。 – EmilioPelaez

回答

4

下面是一個如何做到這一點的例子。使用T.Type來引用TT.self的元類型以引用T類型。

protocol DefaultConstructible { 
    init() 
} 

class A: DefaultConstructible { 
    required init() {} 
} 

struct B: DefaultConstructible { 
    init() {} 
} 

func makeAnInstance<T: DefaultConstructible>(of c: T.Type) -> T { 
    return c.init() 
} 

let a = makeAnInstance(of: A.self) 
let b = makeAnInstance(of: B.self) 
相關問題