Réponses:
Vous pouvez absolument utiliser is
dans un switch
bloc. Voir «Casting de type pour Any et AnyObject» dans le langage de programmation Swift (bien que cela ne soit pas limité Any
bien 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 Double
dans 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)")
}
if
n'est probablement pas le meilleur exemple pour prouver votre point.
value
est quelque chose qui peut être l' un Int
, Float
, Double
et le traitement Float
et de Double
la 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")
}
thing
dans switch` dans aucun descase
s ci-dessus, quelle serait l'utilité icithing
? Je ne l'ai pas vu. Merci.