簡體   English   中英

您如何對帶有無關值的枚舉案例進行簡單的內聯測試?

[英]How can you do a simple inline test for an enumeration's case that has associated values you don't care about?

給出以下代碼:

class Item{}

func foo(item:Item){}

enum SelectionType{
    case single(resultsHandler:(Item)->Void)
    case multi(resultsHandler:([Item])->Void)
}

var selectionType:SelectionType = .single(resultsHandler:foo)

// This line won't compile
let title = (selectionType == .single)
    ? "Choose an item"
    : "Choose items"

您如何更新不會編譯的部分?

三元運算符不能用於具有關聯值的枚舉,因為經典的相等運算符不能與它們一起使用。 您必須使用模式匹配,或者if case語法:

let title: String
if case .single = selectionType {
    title = "Choose an item"
} else {
    title = "Choose items"
}

我不知道是否有直接的方法可以解決您的需求。

我的理解:

  • 默認情況下,枚舉不可等於,您必須實現等於
  • 對於具有關聯值的枚舉,即使您實現了它,我也不可能實現您所要求的。

計算的變量(解決方法1):

enum SelectionType{

    case single(resultsHandler:(Item)->Void)
    case multi(resultsHandler:([Item])->Void)

    var title : String {

        let text : String

        switch self {

        case .single(_):
            text = "Choose an item"
        case .multi(_):
            text = "Choose items"
        }

        return text
    }
}

var title = selectionType.title

如果情況適用(解決方法2):

if case .single(_) = selectionType {
    print("Choose an item")
}
else {
    print("Choose items")
}

暫無
暫無

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

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