AnyClass, 元类型和 .self

在swift 中能够表示 ‘任意’这个概念的除了 Any 和 AnyObject 以外,还有一个 AnyClass

定义是

typealias AnyClass = AnyObject.Type

通过 AnyObject.Type 这种方式所得到的是一个元类型(Meta)

// 获取命名空间

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

// 类名字字符串

let clsName =  "ViewControllerName"

// 获取具体的类

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

// 获取实例化对象

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()                        // 获取类实例对象

print(vc)

}

}

}

//

let tableView = UITableView()

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

你可能感兴趣的:(AnyClass, 元类型和 .self)