Comment pourrions-nous convertir n'importe quel objet en chaîne dans Swift 3, c'est très facile dans l'ancienne version en utilisant.
var str = toString(AnyObject)
J'ai essayé String(AnyObject)
mais la sortie est toujours facultative, même lorsque je suis sûr que AnyObject n'est pas une valeur facultative.
Le compilateur vous suggère de remplacer votre code par:
let s = String(describing: str)
Une autre option est disponible si vous avez une situation où vous souhaitez échouer en silence avec une chaîne vide plutôt que de stocker quelque chose qui ne serait pas à l'origine une chaîne sous forme de chaîne.
let s = str as? String ?? ""
sinon vous avez les moyens d'identifier et de lancer une erreur dans les réponses ci-dessus/ci-dessous.
Voici trois options pour vous:
Option 1 - si laissé
if let b = a as? String {
print(b) // Was a string
} else {
print("Error") // Was not a string
}
Option 2 - garde gardé
guard let b = a as? String
else {
print("Error") // Was not a string
return // needs a return or break here
}
print(b) // Was a string
Option 3 - laisser avec ?? (opérateur coalescent nul)
let b = a as? String ?? ""
print(b) // Print a blank string if a was not a string
Essayer
let a = "Test" as AnyObject
guard let b = a as? String else { // Something went wrong handle it here }
print(b) // Test
essaye ça -
var str:AnyObject?
str = "Hello, playground" as AnyObject?
if let value = str
{
var a = value as! String
}
OR
var a = str as? String
Voici une fonction simple ( repl.it ) qui écrasera toute valeur dans une chaîne, avec nil
devenant une chaîne vide. Je l'ai trouvé utile pour traiter avec JSON qui utilise de manière incohérente null
, des blancs, des nombres et des chaînes numériques pour les ID.
import Foundation
func toString(_ value: Any?) -> String {
return String(describing: value ?? "")
}
let d: NSDictionary = [
"i" : 42,
"s" : "Hello, World!"
]
dump(toString(d["i"]))
dump(toString(d["s"]))
dump(toString(d["x"]))
Tirages:
- "42"
- "Hello, World!"
- ""