Dans Swift, vous pouvez vérifier le type de classe d'un objet à l'aide de 'is'. Comment puis-je incorporer cela dans un bloc 'switch'?
Je pense que ce n'est pas possible, alors je me demande quel est le meilleur moyen de contourner ce problème.
Vous pouvez absolument utiliser is
dans un bloc switch
. Voir "Transtypage de types pour Any et AnyObject" dans le langage de programmation Swift (bien que cela ne se limite pas à Any
bien sûr). Ils ont un exemple complet:
for thing in things {
switch thing {
case 0 as Int:
println("zero as an Int")
case 0 as Double:
println("zero as a Double")
case let someInt as Int:
println("an integer value of \(someInt)")
case let someDouble as Double where someDouble > 0:
println("a positive double value of \(someDouble)")
// here it comes:
case is Double:
println("some other double value that I don't want to print")
case let someString as String:
println("a string value of \"\(someString)\"")
case let (x, y) as (Double, Double):
println("an (x, y) point at \(x), \(y)")
case let movie as Movie:
println("a movie called '\(movie.name)', dir. \(movie.director)")
default:
println("something else")
}
}
Mise en place de l'exemple pour "cas est - cas est Int, est String: " opération, où plusieurs cas peuvent être combinés pour effectuer la même activité pour les types d'objets similaires. Ici "," séparant les types au cas où cela fonctionne comme un OU opérateur.
switch value{
case is Int, is String:
if value is Int{
print("Integer::\(value)")
}else{
print("String::\(value)")
}
default:
print("\(value)")
}
Si vous n’avez pas de valeur, n’importe quel objet:
Swift 4
func test(_ val:Any) {
switch val {
case is NSString:
print("it is NSString")
case is String:
print("it is a String")
case is Int:
print("it is Int")
default:
print(val)
}
}
let str: NSString = "some nsstring value"
let i:Int=1
test(str) // it is NSString
test(i) // it is Int
J'aime cette syntaxe:
switch thing {
case _ as Int: print("thing is Int")
case _ as Double: print("thing is Double")
}
car cela vous donne la possibilité d'étendre la fonctionnalité rapidement, comme ceci:
switch thing {
case let myInt as Int: print("\(myInt) is Int")
case _ as Double: print("thing is Double")
}