美文网首页一步步学习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