Swift学习50:多态和类型转换

张建 lol

向下类型转换

  • 类型的常量或变量实际上是子类的实例,你可以用 as?as! 向下类型转换至子类类型

  • 向下类型转换可能失败,as? 返回的值是 可选类型as! 返回的是 强制类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 基类
class MediaItem {
var name: String
init(name: String) {
self.name = name
}
}
// 子类
class Movie: MediaItem {
var director: String
init(name: String, director: String) {
// 安全检查
self.director = director
super.init(name: name)
}
}
// 子类
class Song: MediaItem {
var artist: String
init(name: String,artist: String) {
self.artist = artist
super.init(name: name)
}
}
let arr = [Movie(name: "1", director: "2"),
Song(name: "3", artist: "4"),
Movie(name: "5", director: "6")]
print(type(of: arr))
for item in arr {
// 向下类型转换
if let realItem = item as? Movie {
print(realItem.director)
}
}

Any 和 AnyObject

swift 为不确定的类型提供了两种特殊的类型别名:

  • AnyObject:表示任何类类型

  • Any:表示任何类型,包括函数类型

嵌套类型

  • swift 中 类、结构体、枚举 可以进行嵌套

  • 嵌套类型能够访问它外部的成员

  • Post title:Swift学习50:多态和类型转换
  • Post author:张建
  • Create time:2023-03-12 22:36:21
  • Post link:https://redefine.ohevan.com/2023/03/12/Swift课程/Swift学习50:多态和类型转换/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
Swift学习50:多态和类型转换