簡體   English   中英

Swift:無法打開枚舉關聯值

[英]Swift: Unable to switch on enum associated value

我出於學習目的將舊的Objective C應用程序轉換為SWIFT,當嘗試在枚舉中提供switch語句時,我偶然發現了一個奇怪的問題。

代碼如下:

switch entry.mood {
    case let Mood.THDiaryMoodGood:
        self.moodImageView.image = UIImage(named: "icn_happy")
    case let Mood.THDiaryMoodAverage:
         self.moodImageView.image = UIImage(named: "icn_average")
    case let Mood.THDiaryMoodBad:
        self.moodImageView.image = UIImage(named: "icn_bad")
    default:
        self.moodImageView.image = UIImage(named: "icn_happy")
}

心情在哪里:

enum Mood: Int16 {
    case THDiaryMoodGood = 0
    case THDiaryMoodAverage = 1
    case THDiaryMoodBad = 2
}

而在情緒的表示保存在名為CoreData實體mood與類型Integer 16

我的類型轉換彼此直接匹配,但是當我嘗試使用上面提供的switch語句時,我得到了錯誤: Enum case pattern cannot match values of the non-enum type Int16

對於我為什么會收到此錯誤,我感到很困惑,從我的理解來看,應該這樣評估流程:

entry.mood = 1

switch(1) {
   // Int16: 0 returned from enum - would evaluate false and fall through to case B
   case Mood.THDiaryMoodGood:   
        self.mood.image = ...   
   // Int16: 1 returned from enum - would evaluate true and set the icon
   case Mood.THDiaryMoodAverage:
        self.mood.image = ...
   // Other cases not evaluated as we returned true...
}

我的思考過程或邏輯是否存在缺陷? 我很困惑...任何幫助將不勝感激,謝謝!

問題在於您要將Int16值傳遞給交換機。 您正在將Int16的entry.mood設置為原始值1,但是交換機需要您的Mood類型。 所以你有一個類型不匹配。

您可以通過將值轉換為心情來解決它:

switch Mood(rawValue: entry.mood)! {

Swift枚舉與Objective-C枚舉不同。 在Objective-c中, 枚舉是備用值 ,由另一個名稱引用。 快速地,枚舉是它自己的類型,並且值是一個關聯的值(如果您不想要某個值,則實際上不需要后備值,但在您的情況下,這很有意義)。

讀一讀,它很好地解釋了事情。 https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Enumerations.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM