美文网首页一步步学习Swift
Swift学习之Any、AnyObject、AnyClass

Swift学习之Any、AnyObject、AnyClass

作者: 冷武橘 | 来源:发表于2020-09-24 11:43 被阅读0次

一、Any和AnyObject

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()
  • Any:可以代表任意类型
var anyObject:AnyObject = Student()
anyObject = UIView()
  • AnyObject:可以代表任意类类型的实例。

二、AnyClass

元类型(metadata)就是类型的类型,一个元类型指针存放着类型相关的信息。X.self就可以获得一个元类型。

class Student {}
var vcType:UIViewController.Type  = UIViewController.self
var studentType:Student.Type  = Student.self
var viewType:UIView.Type = UIView.self
  • vctype、studentType、viewType在这里都是元类型的指针,所存储类型相关的信息。
var  sObject: AnyObject = Student()
var  vObject:AnyObject = UIView()

var SType:AnyObject.Type =  Student.self
var VType:AnyObject.Type = UIView.self
  • AnyObject可以代表任意类类型,:AnyObject.Type在这里就可以表示任意元类型的指针。
import UIKit
class Student {}
var v:AnyObject = Student()
var Vtype:AnyObject.Type = Student.self
var Vcalss:AnyClass =  Student.self
  • typealias AnyClass = AnyObject.Type
  • 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)
  • AnyObject.Type可以通过init()得到一个实例,但类的init()必须是required

四、根据字符串初始化一个控制器

Vicent  15:31:52
   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
    }

相关文章

网友评论

    本文标题:Swift学习之Any、AnyObject、AnyClass

    本文链接:https://www.haomeiwen.com/subject/ekfzsktx.html