2014-06-24 32 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然後將是所述返回值的類型。