AnyClass, Any, AnyClass
Any:可以代表任意类型(枚举、结构体、类,也包括函数类型)
AnyObject:可以代表任意类类型。
class Student {
func test(){
}
}
struct size {
var width:Float
var height:Float
}
var a:Any = 1.2
a = 10
a = "eeee"
a = [10,20]
a = UIView()
a = Student()
a = Student().test()
AnyClass:任意元类型
元类型(metadata)就是类型的类型,一个元类型指针存放着类型相关的信息。X.self就可以获得一个元类型指针。
typealias AnyClass = AnyObject.Type
Any代表任意类型;
AnyObject代表任意类类型;
X.self 获取一个元类型指针;
X.Type代表一个X元类型
AnyObject.Type 代表任意元类型;
AnyClass = AnyObject.Type
AnyClass应用
AnyObject.Type 可以通过init()得到一个实例
class Student{
required init(){}
}
let sType = Student.self
let student = sType.init()
print(student)
根据字符串初始化一个控制器
func getClassFromString(string:String) -> UIViewController? {
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"]as!String
guard let anyObjectType: AnyClass = NSClassFromString(namespace + "." + "\(string)") else {
return nil
}
let vcType = anyObjectType as! UIViewController.Type
let vc:UIViewController = vcType.init()
return vc
}