Réponses:
Vous pouvez absolument utiliser isdans un switchbloc. Voir «Casting de type pour Any et AnyObject» dans le langage de programmation Swift (bien que cela ne soit pas limité Anybien sûr). Ils ont un exemple détaillé:
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")
}
}
is" - et puis il ne l'utilise jamais. X)
case is Doubledans la réponse
Mettre en place l'exemple de "case is - case is Int, is String: " operation, où plusieurs cas peuvent être utilisés ensemble pour effectuer la même activité pour les types d'objets similaires. Ici "," séparant les types au cas où fonctionne comme un opérateur OR .
switch value{
case is Int, is String:
if value is Int{
print("Integer::\(value)")
}else{
print("String::\(value)")
}
default:
print("\(value)")
}
ifn'est probablement pas le meilleur exemple pour prouver votre point.
valueest quelque chose qui peut être l' un Int, Float, Doubleet le traitement Floatet de Doublela même manière.
Si vous n'avez pas de valeur, n'importe quel objet:
rapide 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 il vous donne la possibilité d'étendre rapidement la fonctionnalité, comme ceci:
switch thing {
case let myInt as Int: print("\(myInt) is Int")
case _ as Double: print("thing is Double")
}
thingdans switch` dans aucun descases ci-dessus, quelle serait l'utilité icithing? Je ne l'ai pas vu. Merci.