尝试理解下面的代码。 我知道在实例化Optional时传递T,就像在Optional中一样,但是在map中的U类型呢。这假设是什么类型的?
enum Optional<T> : LogicValue, Reflectable {
case None
case Some(T)
init()
init(_ some: T)
/// Allow use in a Boolean context.
func getLogicValue() -> Bool
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> Mirror
}
答案 0 :(得分:6)
U
类型来自f
函数的map
参数。因此,如果您传递一个返回Int
的闭包,那么map
将返回Int?
。如果您传递一个返回Array<Int>
的闭包,则map
会返回Array<Int>?
。
例如,试试这个:
var opt1: Optional<Int> = .Some(1)
var opt2 = opt1.map { (i: Int) -> String in return "String: \(i)" }
您会发现opt1
是Int?
而opt2
是String?
。
答案 1 :(得分:4)
调用map
函数时,调用者必须提供一个参数,该参数是一个闭包:
Optional
,即T
U
将是所述返回值的类型。