2017-09-01 2 views
0

Swiftのブール代入で `if-case`形式を使用しますか?私は、次の列挙型が定義されている場合は

enum CardRank { 
    case number(Int) 
    case jack 
    case queen 
    case king 
    case ace 
} 

私はI can use an if-let to check if it's a number知っている:

let cardRank = CardRank.number(5) 
if case .number = cardRank { 
    // is a number 
} else { 
    // something else 
} 

の代わりにif文を使用して、しかし、私はのブール結果を割り当てたい「これは数あります"を変数に追加します。

など。このような何か:

let isNumber = (case .number = cardRank) 

はしかし、これは私のコンパイラエラーを与える:

error: expected expression in list of expressions 
let isNumber = (case .number = cardRank) 
       ^

が動作するようにこの種の代入を取得するために類似した1ライン構文はありますか?

は、私が得た最も近いがこれだったが、それはかなり厄介だ:私はimplement the Equatable protocol on my enumをすることができます知って、その後、次の操作を行い

let isNumber: Bool = { if case .number = cardRank { return true } else { return false } }() 

let isAce = cardRank == .ace 

しかし、私はEquatableプロトコルに準拠する必要がないソリューションを探しています。

答えて

3

列挙型のプロパティとして、それを追加します。

extension CardRank { 
    var isNumber: Bool { 
     switch self { 
     case .number: return true 
     default: return false 
     } 
    } 
} 

let isNumber = cardRank.isNumber 
関連する問題