Fondamentalement, je suis en utilisant KVC, et ont potentiellement différents types de valeur retournée, et que vous souhaitez créer une instruction switch en fonction du typeVous cherchez à nettoyer cette déclaration de mise hors tension d'une `Any` valeur de` valueForKeyPath`
J'ai essayé la réponse, mais ce ne serait pas compiler: Swift: Test class type in switch statement
var value: String = "Unknown"
switch node.value(forKeyPath: keyPath) {
case let numberValue is NSNumber:
if numberValue == 0 {
value = "No"
} else if numberValue == 1 {
value = "Yes"
}
case let stringValue is String:
value = stringValue
default:
break
}
il dit
"modèle de variable de liaison ne peut pas apparaître dans une expression"
et
"Cast de <> pour non reliés NSNumber 'échoue toujours"
Ce code fonctionne ici pour moi:
var value: String = "Unknown"
let nodeValue = node.value(forKeyPath: keyPath)
switch nodeValue {
case is NSNumber:
if let numberValue = nodeValue as? NSNumber {
if numberValue == 0 {
value = "No"
} else if numberValue == 1 {
value = "Yes"
}
}
case is String:
if let stringValue = nodeValue as? String {
value = stringValue
}
default:
break
}
mais il semble peu non-optimal que j'ai besoin d'utiliser des liaisons optionnelles pour typer une nouvelle variable
Y a-t-il une meilleure façon de faire cela?
qui semble créer un autre problème, "opérateur binaire ne peut pas être appliqué à" Any? "et" NSNumber " –
avant d'entrer dans le commutateur, essayez d'utiliser' guard' sur la valeur reçue de votre 'valueForKeyPath' .Après cela, vous n'aurez pas besoin de typer –