Objective-C 安全类型转换表达式对应的 Swift 等价实现方法
Objective-C 类型判断强转的Swift等价实现
你当前写的基础判断逻辑stream is OWTRemoteMixedStream本身和OC的isKindOfClass:行为完全一致,后续的赋值环节不需要沿用OC的括号强转语法,有两种可直接使用的正确实现:
- 适配你现有if分支结构的写法
分支内使用Swift对应的强制类型转换语法完成赋值即可,代码如下:
因为进分支前已经完成了类型匹配校验,这里的if stream is OWTRemoteMixedStream { _mixedStream = stream as! OWTRemoteMixedStream }as!不会触发运行时崩溃,执行逻辑和OC原代码完全对齐。 - 更符合Swift开发惯例的简化写法
可以把类型判断、安全强转、值绑定三步逻辑合并成一步,省去重复的类型校验代码:
这种写法一步完成运行时类型匹配校验、安全类型转换、可选值解包,完全覆盖原OC代码的执行效果,代码冗余更低。if let convertedStream = stream as? OWTRemoteMixedStream { _mixedStream = convertedStream }
容易踩的坑
- 动态类型判断场景下不要使用不带修饰的
stream as OWTRemoteMixedStream,该语法仅支持编译期就能确定类型完全匹配的场景,运行时动态判断的场景下会直接报编译错误。 - 直接把原始类型的stream赋值给目标变量会触发类型不匹配的编译报错,必须通过显式类型转换完成类型适配。
内容的提问来源于stack exchange,提问作者tePoloN
相关产品推荐
相关产品推荐

