2014-06-24 8 views
6

में जेनेरिक के भीतर जेनेरिक नीचे दिए गए कोड को समझने की कोशिश कर रहा है। मैं समझता हूं कि वैकल्पिक विकल्प के रूप में वैकल्पिक को तत्काल चालू करते समय टी को पारित किया जाता है, लेकिन मानचित्र में यू प्रकार के बारे में क्या होता है। वह किस प्रकार का मानता है?स्विफ्ट

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

प्रकार Umap कार्य करने के लिए f पैरामीटर से आता है। तो यदि आप एक बंदरगाह पास करते हैं जो Int देता है, तो mapInt? देता है। यदि आप एक बंदरगाह पास करते हैं जो Array<Int> देता है, तो mapArray<Int>? देता है।

उदाहरण के लिए, इस प्रयास करें:

var opt1: Optional<Int> = .Some(1) 
var opt2 = opt1.map { (i: Int) -> String in return "String: \(i)" } 

आपको लगता है कि opt1 एक Int? है और opt2 एक String? है मिल जाएगा।

4

जब map समारोह फोन करने वाले एक भी तर्क है जो एक बंद करता है प्रदान करनी चाहिए बुला:

  1. एक भी तर्क है कि इन्स्तांत Optional करने के लिए इस्तेमाल एक के रूप में एक ही प्रकार है है, यानी T
  2. किसी प्रकार का वापसी मूल्य है।

U तब कहा गया वापसी मूल्य का प्रकार होगा।