2016-11-02 307 views
14

我曾嘗試使用字符串以多種方式創建一個類的實例,其中沒有一個在Swift 3中工作。如何在swift中創建一個類的實例3

下面是 - 斯威夫特前3解決方案,我已經試過了沒有工作

- 製作類的Objective-C類

@objc(customClass) 
class customClass { 
    ... 
} 

//Error here: cannot convert value of type 'AnyClass?' to expected argument type 'customClass' 
let c: customClass = NSClassFromString("customClass") 

- 使用NSString的值,指定類(包括有和沒有使用@objc屬性)

@objc(customClass) 
class customClass { 
    ... 
} 

//Error here: cannot convert value of type 'String' to expected argument type 'AnyClass' (aka 'AnyObject.Type') 
var className = NSStringFromClass("customClass") 

let c: customClass = NSClassFromString(className) 

我沒有做正確的事情,但沒有找到任何解決方案。

如何在Swift 3中使用字符串創建類的實例?

+0

的區別,我的問題之間和你鏈接的是,我問'Swift3'如何做到這一點,因爲這個問題的答案不能用我的'Swift3' c ode – Danoram

+0

夠公平的。我收回了我的近距離投票。 – par

回答

13

你可以試試這個:

func stringClassFromString(_ className: String) -> AnyClass! { 

    /// get namespace 
    let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String; 

    /// get 'anyClass' with classname and namespace 
    let cls: AnyClass = NSClassFromString("\(namespace).\(className)")!; 

    // return AnyClass! 
    return cls; 
} 

這樣使用FUNC:

class customClass: UITableView { 

    } 
let myclass = stringClassFromString("customClass") as! UITableView.Type 
let instance = myclass.init() 
+0

它應該是'let instance = myclass.init()'? – Danoram

+0

是的,你是對的。我已經重寫我的代碼 –

+0

我喜歡這個解決方案!儘管我想知道是否有與swift類似的解決方案 - 類似於NSClassFromString – Danoram

相關問題