类型转换:is、as?、as! 与 as
使用 Swift 的类型转换运算符安全地检查和转换类型。
类型转换:is、as?、as! 与 as 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
什么是类型转换
类型转换允许您检查实例,或将实例转换为其层次结构中的其他类。
class Animal { var name: String = "Animal" }
class Dog: Animal { func bark() { print("Woof") } }
let a: Animal = Dog()
print(a.name)类型检查运算符
使用 is 检查实例是否属于某个特定子类。
let a: Animal = Dog()
if a is Dog {
print("It's a dog")
}使用 as? 向下转换
as? 会尝试向下转换,并返回一个可选值。如果转换失败,结果就是 nil。
let a: Animal = Dog()
if let dog = a as? Dog {
dog.bark()
} else {
print("Not a dog")
}使用 as! 向下转换
as! 会强制转换为子类型。只有在确定类型正确时才能使用;类型错误会导致崩溃。
let a: Animal = Dog()
let dog = a as! Dog
dog.bark()使用 as 向上转换
从子类向上转换为超类总是会成功,并使用 as。
let dog = Dog()
let animal = dog as Animal
print(animal.name)集合中的类型转换
类型为 [Any] 的混合类型数组需要进行类型转换,才能使用特定行为。
let items: [Any] = [1, "hello", Dog()]
for item in items {
if let d = item as? Dog { d.bark() }
if let s = item as? String { print(s) }
}使用 AnyObject 进行类型转换
AnyObject 表示任意类实例。使用 as? 提取具体类型。
let objs: [AnyObject] = [Dog(), Dog()]
for obj in objs {
if let d = obj as? Dog { d.bark() }
}协议类型转换
您可以使用相同的运算符,在协议类型与具体类型之间进行转换。
protocol Runnable { func run() }
class Cat: Animal, Runnable { func run() { print("Cat runs") } }
let r: Runnable = Cat()
if let cat = r as? Cat { print(cat.name) }在 switch 中使用类型模式匹配
Swift 的 switch 语句可以使用 is 模式匹配类型。
let value: Any = 42
switch value {
case is Int: print("Integer")
case is String: print("String")
default: print("Other")
}switch 模式中的 as?
将 switch 与 let x as Type 结合,即可在一步中同时检查类型并绑定值。
let value: Any = "Swift"
switch value {
case let s as String: print("String: \(s)")
case let i as Int: print("Int: \(i)")
default: break
}安全类型转换最佳实践
始终优先使用 as? 而不是 as!,以避免生产代码在运行时崩溃。
func describe(_ obj: AnyObject) {
if let dog = obj as? Dog { dog.bark(); return }
print("Unknown type")
}快速检查
向下转换时,哪个运算符会返回可选值?
课程回顾
Swift 类型转换:is 检查类型,as? 安全地向下转换为可选值,as! 强制向下转换,as 向上转换。在生产代码中优先使用 as?。
常见问题解答
「类型转换:is、as?、as! 与 as」课时是免费的吗?
是的 — 「类型转换:is、as?、as! 与 as」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「类型转换:is、as?、as! 与 as」这节课中我会学到什么?
使用 Swift 的类型转换运算符安全地检查和转换类型。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「类型转换:is、as?、as! 与 as」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 类继承与 super 关键字
- override、final 与禁止子类化
- 类型转换:is、as?、as! 与 as
- 反初始化器与内存生命周期