前言:
在一些大型的項目中常常在加載頁面的時候根據服務器請求下來的數據動態創建視圖控制器對象,最近的一個項目就有這一方面的需求,加載頁面之前需要先請求服務器的數據得到一個JSON字典,根據里面字符串的名字創建對應的控制器,當然項目工程中有預留對應的控制器。之前在OC中利用字符串動態創建對象可以利用方法NSClassFromString獲取到對應的類。在swift中獲取類關鍵步驟是通過這個方法,但是跟OC有了很大的不同,多了一個命名空間.
創建一個對象,將對象打印出來之后在控制台可以看到類名之前多了一串字符串,該字符串就是命名空間。
swift動態創建對象:
為此要動態創建對象的時候需要先獲取命名空間,步驟如下:
1 //動態獲取命名空間: 2 let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String 3 //根據命名空間和傳過來的控制器名字獲取控制器的類 4 let controllerClass:AnyClass = NSClassFromString(nameSpace + "." + controllerName)! 5 6 //告訴編譯器真實的控制器類型,比如這個控制器本質是UITableViewController則: 7 let realClass = controllerClass as! UITableViewController.Type 8 9 //實例化這個控制器出來 10 let childController = realClass.init()
