Swift中Optional扩展里的关键字Wrapped是什么含义?
Swift Optional扩展中Wrapped的含义与作用
基础定义
Wrapped不是Swift全局关键字,它是Optional泛型类型内置的泛型参数别名,专门指代当前Optional实例所包装的实际值的类型。
Optional本身的底层是泛型枚举,简化定义如下:
enum Optional<Wrapped> { case none // 对应nil case some(Wrapped) // 对应非nil时包装的实际值 }
所以在扩展Optional时,不需要额外声明泛型参数,直接使用内置的Wrapped就能获取到当前Optional包装值的具体类型。
结合示例代码场景的具体作用
你提供的是Optional中flatMap方法的标准实现:
extension Optional { func flatMap<U>(_ transform: (Wrapped) -> U?) -> U? { guard let x = self else { return nil } return transform(x) } }
这里Wrapped的作用非常明确:
- 约束入参闭包的入参类型:
transform闭包的入参类型标注为Wrapped,代表如果当前Optional不为nil,解包后的值类型就是Wrapped,闭包可以直接拿到解包后的非Optional类型值,不需要二次解包 - 保障类型安全:保证闭包接收的参数类型和当前Optional包装的类型完全一致,比如你用
String?类型调用这个flatMap方法,Wrapped就自动对应String类型,传入的闭包就只能接收String类型的入参,编译阶段就能排查类型不匹配问题 - 示例代码中
guard let x = self解包得到的x类型就是Wrapped,可以直接传入transform闭包,不需要额外类型转换
我们可以通过实际调用场景更直观理解:
let optionalStr: String? = "123" // 此时Optional的Wrapped是String类型 let result = optionalStr.flatMap { Int($0) } // 传入flatMap的闭包接收的$0就是String类型(不需要解包),返回Int? // 最终result的类型是Int?,值为Optional(123)
内容的提问来源于stack exchange,提问作者Nighthawk
相关产品推荐
相关产品推荐

