最新 Swift5 Any AnyObject 元类型 基类 Self

本文深入探讨了Swift中的Any和AnyObject类型的使用方法及特点,并介绍了如何利用元类型进行类大小获取及类继承关系查询。同时,通过具体示例展示了Self在Swift中的应用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值