Swift 协议与泛型深度解析
1. 类型转换与协议
在 Swift 中, as! 和 as? 可用于将声明为协议类型的对象转换为其实际类型。这非常重要,因为遵循协议的对象通常能够接收协议本身无法接收的消息。
例如,有一个 Bird 结构体遵循 Flier 协议:
struct Bird : Flier {
func fly() {
}
func getWorm() {
}
}
虽然 Bird 作为 Flier 可以飞行,但只有作为 Bird 时才能获取虫子。所以不能直接让任意 Flier 获取虫子:
func tellGetWorm(_ f:Flier) {
f.getWorm() // compile error
}
不过,如果这个 Flier 实际上是 Bird ,它显然可以获取虫子,这就是类型转换的意义:
func tellGetWorm(f:Flier) {
(f as? Bird)?.getWorm()
}
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



