AnyClass, 元類型和 .self

在swift 中能夠表示 ‘任意’這個(gè)概念的除了 Any 和 AnyObject 以外,還有一個(gè) AnyClass

定義是

typealias AnyClass = AnyObject.Type

通過(guò) AnyObject.Type 這種方式所得到的是一個(gè)元類型(Meta)

// 獲取命名空間

let namespace = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""

// 類名字字符串

let clsName =? "ViewControllerName"

// 獲取具體的類

let cls = NSClassFromString(namespace + "." +? clsName) as? UIViewController.Type

// 獲取實(shí)例化對(duì)象

let vc = cls?.init()

//

class MusicViewController: UIViewController { }

class AlbumViewController: UIViewController { }

let userimgVCTypes: [AnyClass] = [MusicViewController.self, AlbumViewController.self]

func setupViewControllers(_ vcTypes: [AnyClass]){

for vcType in vcTypes {

if vcType is UIViewController.Type {

let vcClass = vcType as! UIViewController.Type? // 獲取類

let vc = vcClass.init()? ? ? ? ? ? ? ? ? ? ? ? // 獲取類實(shí)例對(duì)象

print(vc)

}

}

}

//

let tableView = UITableView()

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellId")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容