破棄 - Swift 3の文字列からクラスのインスタンスを作成する方法



swift クラス 作成 (2)

私はSwift 3で働いていない多くの方法で文字列を使ってクラスのインスタンスを作成しようとしました。

私が試したプレSwift 3のソリューションは以下の通りです。

- クラスを客観的なクラスにする

@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で文字列を使用してクラスのインスタンスを作成するにはどうすればよいですか?

https://src-bin.com


Answer #1

あなたはこれを試すことができます:

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()

Answer #2

クラスをここに変換するカテゴリを追加しました: https://.com/a/45112622/182551 : https://.com/a/45112622/182551





swift3