switch-case
pour la comparaison static var
s ne fonctionne pas comme prévu. Cependant, spécifier un type ou comparer fonctionne directement. S'il vous plaît voir ci-dessous:Variation statique rapide dans le boîtier du commutateur
class AnimalHelper {
func loadAnimal(_ animal: Animal) {
// Doesn't compile
switch animal {
case .squirrel, .deer: loadGrass()
case .dolphin: return // not implemented
default: loadMeat()
}
// Direct comparison works
if animal == .squirrel || animal == .deer {
loadGrass()
} else if animal == .dolphin {
return // not implemented
} else {
loadMeat()
}
// Specifying the type explicitly also works
switch animal {
case Animal.squirrel, Animal.deer: loadGrass()
case Animal.dolphin: return // not implemented
default: loadMeat()
}
}
func loadGrass() {}
func loadMeat() {}
}
class Animal {
let id = 6 // Will be generated
let hasFourLegs = true
let numberOfEyes = 2
// ... //
static var squirrel: Animal { return .init() }
static var dolphin: Animal { return .init() }
static var puma: Animal { return .init() }
static var deer: Animal { return .init() }
}
extension Animal: Equatable {
public static func ==(lhs: Animal, rhs: Animal) -> Bool {
return lhs.id == rhs.id
}
}
Je suis sûr que quelque chose au sujet de ce qui précède n'est pas tout à fait raison parce que je me fais des erreurs de compilation suivantes:
Enum case 'squirrel' not found in type 'Animal'
Enum case 'deer' not found in type 'Animal'
Enum case 'dolphin' not found in type 'Animal'
s'il vous plaît laissez-moi savoir comment est vérifié pour l'égalité dans un switch-case
est différent de celui dans une condition if
.
Mettez à jour votre question avec le message d'erreur exact et indiquez la ligne qui a provoqué l'erreur. – rmaddy