2014-06-24 31 views
6

尝试理解下面的代码。 据我所知,在实例化可选项时,T被传递,如在可选项中那样,但是地图中的U类型又如何呢?这种假设是什么类型?Swift中通用的泛型

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 
} 

回答

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)" } 

你会发现,opt1Int?opt2String?

4

当调用map函数调用者必须提供一个参数,其是一个封闭:

  1. 只有一个参数是相同的类型用于 实例化Optional的一个,即T
  2. 具有某种类型的返回值。

U然后将是所述返回值的类型。