2016-11-02 19 views
14

Próbowałem utworzyć instancję klasy za pomocą ciągu znaków na wiele sposobów, przy czym żaden z nich nie pracuje pod numerem w Swift 3.jak utworzyć instancję klasy z ciągu znaków w swift 3

Poniżej są wstępnie Swift 3 rozwiązania próbowałem które nie pracują

- Making klasa cel-c klasy

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

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

- Określanie klasy przy użyciu wartości NSString (zarówno zi bez użycia atrybutu @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) 

Nie robię czegoś dobrze, ale nie znalazłem żadnych rozwiązań w Internecie.

Jak utworzyć wystąpienie klasy za pomocą ciągu znaków w Swift 3?

+0

Różnica między moje pytanie a ten, który masz połączony, jest taki, że pytam, jak to zrobić w 'Swift3', ponieważ odpowiedzi z tego pytania nie działają z moim' Swift3' c ode – Danoram

+0

Wystarczająco fair. Wycofałem moje głosowanie. – par

Odpowiedz

13

Można spróbować to:

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; 
} 

użyć func takiego:

class customClass: UITableView { 

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

Czy powinno to być 'let instance = myclass.init()'? – Danoram

+0

Tak, masz rację. Przepisałem swój kod –

+0

Podoba mi się to rozwiązanie! chociaż chciałbym wiedzieć, czy istnieje rozwiązanie podobne wcześniejsze wersje szybkiej - podobnej do 'NSClassFromString' – Danoram

Powiązane problemy