2014-08-29 113 views
2

在蘋果公司的「A迅速遊」他們有這樣的代碼片段:如何獲取枚舉值的值?

enum OptionalValue<T> { 
    case None 
    case Some(T) 
} 
var possibleInteger: OptionalValue<Int> = .None 
possibleInteger = .Some(100) 

你將如何得到100?您不能使用possibleInteger == 100來測試possibleInteger的值是否在100以內。我知道你可以在枚舉中放置函數,但是你不能有變量。也許我理解錯枚舉...

如果我命令,宣佈可選(var x:Optional<Int>)時點擊Optional,我能找到

enum Optional<T> : Reflectable, NilLiteralConvertible { 
    case None 
    case Some(T) 
    init() 
    init(_ some: T) 

    /// Haskell's fmap, which was mis-named 
    func map<U>(f: (T) -> U) -> U? 
    func getMirror() -> MirrorType 
    static func convertFromNilLiteral() -> T? 
} 

但我不明白任何的意思。幫幫我?

+0

經過大量研究,我需要實現'getMirror()'函數。這會讓你在操場上展現出我正在努力做到的價值。那麼,研究這個「MirrorType」的東西。 另外,'convertFromNilLiteral() - > T?'只是在您將其設置爲nil時將枚舉設置爲'.None'。我仍然不知道'func map (f:(T) - > U) - > U?'。 – Ignat 2014-08-29 16:11:43

+0

Re:'func map ...',看看:http://stackoverflow.com/questions/24395211/generic-within-a-generic-in-swift – 2014-08-29 16:53:19

回答

2

您可以使用switch語句來獲取值as described here。相關位:

...關聯值可以作爲開關 聲明的一部分提取。您提取的 開關盒體內使用每個相關值作爲一個常數(與 讓前綴)或變量(使用var前綴):

對於你的情況,你想要的東西,如:

switch possibleInteger { 
case .Some(let value): 
    println(value) 
case .None: 
    println("<None>") 
} 
+0

哇,我沒有想到做一個變量內。有些:哦......那麼我怎麼會讓這個價值出現在遊樂場的左邊呢?它通過實現getMirror(),對嗎? – Ignat 2014-08-29 16:19:38

+0

我認爲你是對的,你必須執行'Reflectable'協議才能工作。我還沒有嘗試過,但看起來相當複雜。 – 2014-08-29 16:44:43