Swift通過類名建立物件

小溪彼岸發表於2016-06-18

OC中可以使用NSClassFromString將字串直接轉換為類名,在Swift中利用NSClassFromString不出意外結果都為nil,因為Swift中根據字串轉換的方法需要加上YourAppName,格式為”YouAPPName.類名”

寫了一個類目,具體程式碼如下:

import Foundation
import UIKit

extension NSObject {

   func swiftClassFromString(className: String) -> UIViewController! {
        // get the project name
        if  let appName: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String? {
            //拼接控制器名
            let classStringName = "\(appName).\(className)"
            //將控制名轉換為類
            let classType = NSClassFromString(classStringName) as? UIViewController.Type
            if let type = classType {
                let newVC = type.init()
                return newVC
            }
        }
        return nil;
    }
}

呼叫:

        //將控制器名轉換為類
        let vc = self.swiftClassFromString(className)
        self.navigationController!.pushViewController(vc, animated: true)

相關文章