Swift类型检查运算符通常指的是is、as和Type,用于检查、转换或获取某个值的某种类型。
is类型判断运算符
用于检查某个值是否为某种类型。
let view: Any = Text("Hello")
if view is Text {
print("是 Text 类型")
}
返回类型:Bool
用途:判断类型,常配合 if 或 guard 使用。
as、as? 和 as! 可选类型转换
as:用于向上转换为协议或父类型。
let text = Text("Hello")
let view: some View = text as View // 编译时向上转换
通常用于泛型上下文或协议中。
as?:尝试将一个值转换成指定类型,如果失败返回 nil。
let view: Any = Text("Hello")
if let textView = view as? Text {
print("转换成功:\(textView)")
}
返回类型:可选值
用途:安全类型转换,在不确定类型时使用。
as!:将值强制转换为某类型,如果失败则崩溃。
let view: Any = Text("Hello")
let textView = view as! Text // 类型不匹配时会崩溃
慎用,只在完全确认类型正确时使用。
详细知识点,可以查看《Swift类型转换关键词as》文章。
type获取运行时类型
获取某个值的实际运行时类型:
let view = Text("Hello")
print(type(of: view)) // Text
可用于调试或动态类型判断。
示例场景
1、判断动态视图类型:
let someView: AnyView = AnyView(Text("Hello"))
if let text = someView as? Text {
print("是 Text")
}
2、用于菜单项响应:
@objc func menuAction(_ sender: Any) {
if let menuItem = sender as? NSMenuItem {
print("点击菜单项:\(menuItem.title)")
}
}
总结
is用于类型判断,返回Bool类型,例如判断类型是否为Text类型。
as、as?和as!用于类型转换,每个as的转换方式不同:
1、普通的as用于编译器类型转换,所以常用于协议、泛型之间判断。
2、as?为可选转换,在运行期间对于不确定类型时。使用as?转换,转换失败会返回nil。
3、as!为强制转换,只在明确目标类型时使用,否则不推荐使用,因为如果转换失败就会导致代码崩溃。
type(of:)用于获取运行时的类型,返回的是Type类型。
is和type(of:) 类型判断之间的主要区别在于,is返回的是Bool类型,type(of:)返回的是Type类型,因此根据使用场景使用is或者type(of:)。
相关文章
Swift类型转换关键词as:https://fangjunyu.com/2024/12/24/swift%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2%e5%85%b3%e9%94%ae%e8%af%8das/