可选扩展中的 swift 关键字 Wrapped 意味着什么?

Nig*_*awk 0 swift

可选扩展中的 swift 关键字 Wrapped 意味着什么?

extension Optional {
    func flatMap<U>(_ transform: (Wrapped) -> U?) -> U? {
        guard let x = self else { return nil }
        return transform(x)
    }
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 6

在扩展中,您要扩展的类型的泛型参数可以通过仅编写其简单名称来引用,并注意这Optional是一个泛型类型。

@frozen enum Optional<Wrapped>
Run Code Online (Sandbox Code Playgroud)

所以Wrapped在函数声明中指的是在那里声明的泛型参数。

如您所知,可选类型通常写为T?(whereT是 some type),这是 的语法糖Optional<T>。例如,Int?与 相同Optional<Int>, 与String?相同Optional<String>,等等。

换句话说,Wrapped基本上只表示 之前的类型?,无论它是什么。如果你有一个String?(又名Optional<String>),那么它的签名flatMap将是:

func flatMap<U>(_ transform: (String) -> U?) -> U?
Run Code Online (Sandbox Code Playgroud)