最新 Swift5 Any AnyObject 元类型 基类 Self

Any AnyObject
Swift 提供了2种特殊的类型: Any AnyObject
Any:可以代表任意类型(枚举 结构体 类 也包括函数类型)
AnyObject: 可以代表任意类类型(在协议后面写上:AnyObject代表只能类能遵守这个协议)

//var date = [Any]()
var date = Array<Any>()
date.append(1)
date.append(2.2)
date.append("abc")
date.append({10})

元类型

class Person {
    var age : Int = 0
}
class Student: Person {
    var name:Int = 0
    var no:  Int = 0
}
print(class_getInstanceSize(Student.self)) // 40 (16+8+(8+8))
print(class_getSuperclass(Student.self)!)  // Person
print(class_getSuperclass(Person.self)!)   // _TtCs12_SwiftObject

 

Swift 基类 https://github.com/apple/swift/blob/main/stdlib/public/runtime/SwiftObject.h

SWIFT_RUNTIME_EXPORT @interface SwiftObject<NSObject> {
  @private
  Class isa;
  SWIFT_HEAPOBJECT_NON_OBJC_MEMBERS;// 引用计数器和属性信息
}

Self一般用作放会值类型 限定返回值跟方法调用者 必须是同一个类型(也可以做为参数类型)

protocol Runnable{
    func run() -> Self
}
class Father : Runnable {
    required init(){}
    func run() -> Self {
        return type(of: self).init()
    }
}
class Sun :Father {}
let fa = Father()
fa.run() // Father
let sun = Sun()
sun.run() // Sun

如果Self用类中,要求返回调用的初始化是required

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值