在Swift当中,我们经常会遇到类型判断的相关需求。本文介绍了如何使用 is 和 as 以及Type 和 type(of:) 的相关用法。
一、is
-
is用于检查某个实例是否属于某个类型。“类型”所设计的面很广,不单单是我们我们经常使用的class,protocol也可以作为判断的条件,我们可以判断某个实例是否是属性某个协议下的。 -
使用is做类型检查时会返回一个布尔值。
二、as
as 用于尝试将一个实例转为另一个类型,注意是“尝试”,因为有可能转换失败。
三、Type与type(of:)
Type 表示某个类型的元类型。type(of:) 用于在运行时动态获取某个实例的类型。
示例代码:
import UIKitprotocol SomeBody {
var sexy: String { get }
}
class PersonModel: NSObject, SomeBody {
var sexy: String
var name: String?
init(sexy: String) {
self.sexy = sexy
}
}
class Boy: PersonModel {
}
class Girl: PersonModel {
}
struct BoyOrGirl: SomeBody {
var sexy: String
let name: String
}
func someOperation(person: PersonModel) {
if let p = person as? Boy, let name = p.name {
print("👦🏻:\(name) - \(p.sexy)")
}
if case let p as Girl = person, let name = p.name {
print("👧🏻:\(name) - \(p.sexy)")
}
}
func someOperation2(person: SomeBody) {
if person is BoyOrGirl {
print("BoyOrGirl")
}
}
let girl = Girl(sexy: "女")
girl.name = "丽丽"
let boy = Boy(sexy: "男")
boy.name = "小明"
let other = BoyOrGirl(sexy: "X", name: "Jones")
someOperation(person: girl)
someOperation(person: boy)
someOperation2(person: other)