2017-09-01 1 views
0

Si je le ENUM suivant défini:Utilisation du format `if-case` dans l'affectation booléenne dans Swift?

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

Je sais 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 
} 

Au lieu d'utiliser une instruction if, cependant, je veux attribuer le résultat booléen de « est-ce un nombre "à une variable.

E.g. quelque chose comme ceci:

let isNumber = (case .number = cardRank) 

Cependant, cela me donne l'erreur du compilateur:

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

Y at-il une syntaxe 1 ligne similaire pour obtenir ce genre d'affectation au travail?

Le plus proche je suis arrivé était, mais il est assez en désordre:

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

Je sais que je peux implement the Equatable protocol on my enum, puis procédez comme suit:

let isAce = cardRank == .ace 

Mais je suis à la recherche d'une solution qui ne nécessite pas de se conformer au protocole Equatable.

Répondre

3

Ajouter comme propriété sur le ENUM:

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

let isNumber = cardRank.isNumber