当前位置:网站首页>Swift中的类型相关内容
Swift中的类型相关内容
2022-08-02 22:30:00 【扑腾的蛾子】
Any、AnyObject
1、Swift提供了2种特殊的类型:Any、AnyObject
Any可以代表任意类型(枚举、结构体、类,也包括函数类型)
AnyObject可以代表任意类类型(在协议后面写上AnyObject,代表只有类能够遵守这个协
议)
class Person {
}
var stu: Any = 10
stu = "Jack"
stu = Person()
is、as?、as!、as
1、is用来判断是否为某种类型,as用来做强制类型转换
class Person {
func study() {
}
}
var stu: Any = 10
(stu as? Person)?.study()
var data = Array<Any>()
data.append(2 as Any)
X.self、X.Type、AnyClass
1、X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息
class Person {
}
Person.self
2、X.self是属于X.Type类型
Person.Type是堆空间对象的前八个字节,也就是元类型地址值。
class Person {}
class Student: Person {}
var perType: Person.Type = Person.self
var stuType: Student.Type = Student.self
perType = Student.self
class Person {}
class Student: Person {}
var anyType: AnyObject.Type = Person.self
anyType = Student.self
public typealias AnyClass = AnyObject.Type
var anyType2: AnyClass = Person.self
anyType2 = Student.self
var per = Person()
var perType = type(of: per)//非函数调用,直接取出per的前八个字节
print(Person.self == perType) // true
元类型的应用
1、元类型类似于OC里面的class,可以用于动态初始化
class Animal {
required init() {}
}
class Cat: Animal {}
class Dog: Animal {}
class Pig: Animal {}
func create(_ classes: [Animal.Type]) -> [Animal] {
var arr = [Animal]()
for cls in classes {
arr.append(cls.init())
}
return arr
}
print(create([Cat.self, Dog.self, Pig.self]))
2、可以通过元类型调用runtime的一些API。Swift有一个隐藏的基类,swift._swiftObject
Self
1、Self一般用作返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)
protocol Runnable {
func test() -> Self
}
class Person: Runnable {
required init() {}
func test() -> Self {
type(of: self).init()
}
}
class Student: Person {}
var stu = Student()
stu.test() //Student
2、如果Self用在类中,要求返回时调用的初始化器是required的
边栏推荐
- Towards a General Purpose CNN for Long Range Dependencies in ND
- Mysql查看慢查询日志
- 【斯坦福计网CS144项目】Lab5: NetworkInterface
- Image recognition from zero to write DNF script key points
- 软件测试笔试题1(附答案)
- IDO代币预售合约系统开发技术详细
- If the watermark according to how to realize the function
- The only way to go from a monthly salary of 10k to 30k: automated testing
- 创建型模式 - 抽象工厂模式AbstractFactory
- C语言函数详解(2)【函数参数——实际参数(实参)&形式参数(形参)】
猜你喜欢
Auto.js脚本程序打包
Software testing pen questions 1 (with answers)
2022暑假牛客多校1 (A/G/D/I)
I have been in the software testing industry for nearly 20 years, let me talk to you about today's software testing
Mysql查看慢查询日志
TDengine 在中天钢铁 GPS、 AIS 调度中的落地
Jmeter二次开发实现rsa加密
JS Date 时间戳 getTune data.parse 倒计时小程序
图像识别从零写出dnf脚本关键要点
VS保存后Unity不刷新
随机推荐
Web APIs BOM- 操作浏览器-Window对象
记一次mysql查询慢的优化历程
Jmeter二次开发实现rsa加密
threejs 动态调整相机位置,使相机正好能看到对象
创建型模式 - 抽象工厂模式AbstractFactory
HCIP(16)
Kubernetes 进阶训练营 网络
qt静态编译出现Project ERROR: Library ‘odbc‘ is not defined
Tanabata is here - the romance of programmers
技术分享 | 接口自动化测试中如何对xml 格式做断言验证?
Numpy数组中d[True]=1的含义
图像识别从零写出dnf脚本关键要点
Unity WallFxPack使用
刚安装完win10专业工作站版,系统变量中Path默认值有哪些?重新建一个“PATH”变量名,会覆盖掉原先的“Path”。
采用QT进行OpenGL开发(三)着色器编程
MySQL删除数据后,释放磁盘空间
go context 包
[TypeScript] Deep Learning of TypeScript Classes (Part 1)
【TypeScript】深入学习TypeScript类(下)
Based on two levels of decomposition and the length of the memory network multi-step combined forecasting model of short-term wind speed