'(NSObject, AnyObject) " n'est pas convertible en 'String'
Comment puis-je convertir un objet de type (NSObject, AnyObject)
le type String
?
À la fin de la première ligne de la méthode ci-dessous, as String
provoque l'erreur de compilateur:
'(NSObject, AnyObject)' is not convertible to 'String'
Casting street
à NSString
au lieu de String
compile, mais je suis coulée street
à String
parce que je veux le comparer à placemark.name
, qui a pour type String!
, pas NSString
.
Je sais name
et street
sont fournies en option, mais je suis en supposant qu'ils ne sont pas nil
pour l'instant, car tous les lieux retourné à partir de MKLocalSearch
semblent avoir non nul et noms de rues.
func formatPlacemark(placemark: CLPlacemark) -> (String, String) {
let street = placemark.addressDictionary["Street"] as String
if placemark.name == street {
//Do something
}
}
Vous devez vous connecter pour publier un commentaire.
Un
String
n'est pas un objet, donc vous devez le convertir en uneNSString
. Je recommande la syntaxe suivante pour la lancer et la découvre en même temps. Ne vous inquiétez pas au sujet de la comparaison à une variable de typeString!
depuis qu'ils sont compatibles. Cela va fonctionner:Cela a l'avantage que si "la Rue" n'est pas une clé valide dans votre dictionnaire ou si le type d'objet est autre chose que
NSString
, cela ne va pas planter. Il ne peut pas entrer dans le bloc.Si vous vraiment voulez de la rue à un
String
vous pourriez faire ceci:mais cela ne veut pas acheter quelque chose dans ce cas.
placemark.name == street
au lieu destreet.isEqualToString(placemark.name)
? Je veux m'assurer que je suis la vérification de la chaîne de l'égalité (isEqualToString
), pas l'identité de l'objet (==
).==
est le moyen rapide de tester la chaîne de l'égalité. Voir: developer.apple.com/library/prerelease/mac/documentation/Swift/...Le type de retour de la recherche via l'indice pour une swift dictionnaire doit être une option car il y a peut être pas de valeur pour la clé donnée.
Vous devez faire:
Je pense qu'il peut avoir à faire avec
addressDictionary
être unNSDictionary
.Si vous convertissez
addressDictionary
à une Swift dictionnaire, il devrait fonctionner.Dictionary
complètement différent deNSDictionary
? Donc, serait-ce à dire par la coulée de laNSDictionary
àDictionary
, le programme aura de créer un tout nouveauDictionary
objet et de le remplir avec les touches & les valeurs de l'originalNSDictionary
? Cela ressemble bien plus de travail qu'un simple cast.NSString
, ce sera le plantage de l'application. Vous auriez du le faire uniquement si vous avez été à 100% que tous les objets ont étéNSString
s, et puis vous le ferais qu'une fois, lorsque les données sont d'abord créé. Si vous êtes à l'appel d'une API externe à votre application pour obtenir leNSDictionary
, il serait plus sûr de vérifier chaque objet avec une forme facultative de type opérateur de cast (as?
).