IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Swift中的类型相关内容 -> 正文阅读

[移动开发]Swift中的类型相关内容

?

?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的

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:56:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:25:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码