Convertir ou convertir l'objet string
comment puis-je convertir n'importe quel type d'objet à une chaîne de caractères?
let single_result = results[i]
var result = ""
result = single_result.valueForKey("Level")
maintenant, je reçois le message d'erreur: impossible d'affecter une valeur de type d'un objet à une valeur de type chaîne de caractères.
et si je cast:
result = single_result.valueForKey("Level") as! String
j'obtiens l'erreur:
Pourrait ne pas jeter de valeur de type '__NSCFNumber' (0x103215cf0) à "NSString' (0x1036a68e0).
Comment puis-je résoudre ce problème?
de quel type est
Qu'est-ce que les résultats de type?
single_result.valueForKey(“Level”)
Avez-vous essayé d'utiliser String(single_result.valueForKey(“Level”))
Qu'est-ce que les résultats de type?
OriginalL'auteur da1lbi3 | 2015-05-16
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas jeter tout aléatoire de la valeur à une chaîne. Une force cast (
as!
) échouera si l'objet ne peut pas être converti en chaîne de caractères.Si vous savez qu'il contient toujours un NSNumber ensuite, vous devez ajouter le code qui convertit le NSNumber à une chaîne. Ce code devrait fonctionner:
Si l'objet renvoyé par le "Niveau" de la clé peut être de différents types d'objets, alors vous aurez besoin d'écrire plus souple code de traiter avec ceux d'autres types possibles.
Swift tableaux et les dictionnaires sont normalement dactylographié, ce qui rend ce genre de chose plus propre.
Je dirais que @AirSpeedVelocity réponse (Européens ou Africains?) est le meilleur. Utiliser le haut-
toString
fonction. Il semble que cela fonctionne sur n'IMPORTE quel Swift type.EDIT:
Dans Swift 3, la réponse semble avoir changé. Maintenant, vous voulez utiliser la Chaîne de l'initialiseur
Ou, pour utiliser le code à partir de la question:
Noter qu'en général, vous ne voulez pas valueForKey. C'est un KVO méthode qui ne fonctionne que sur NSObjects. En supposant que single_result est un Dictionnaire, vous voulez probablement cette syntaxe:
Vous pouvez simplement utiliser
toString
directement sur la valeur sans moulage.OriginalL'auteur Duncan C
La
toString
fonction accepte tout type et sera toujours de produire une chaîne de caractères.Si c'est une Swift type qui implémente l'
Printable
protocole, ou a annuléNSObject
’s description de la propriété, vous allez obtenir ce que l'.description
propriété renvoie. Dans le cas deNSNumber
, vous obtiendrez une représentation de chaîne de caractères le nombre.Si ce n'est pas le cas, vous aurez une assez inutile chaîne de la classe nom et l'adresse de la mémoire. Mais la plupart des classes standard, y compris
NSNumber
, va produire quelque chose de sensible.(p.s. toujours utiliser
toString
plutôt que de tester pourPrintable
. Pour une chose,String
n'est pas conforme àPrintable
...)toString
?href="http://i.imgur.com/3RXusDZ.png" >Ressemble
Cool thx. Appris quelque chose de nouveau.
Je ne savais pas que toString a été mis en œuvre dans tous les Swift classes. Merci pour cela. (Voté)
Notez que toString a été supprimé dans Swift 3. utilisation
String(describing:)
au lieuOriginalL'auteur Airspeed Velocity
toString()
il ne semble pas exister dans Swift 3 plus.Semble qu'il y ait un failable initialiseur qui sera de retour le passé dans la valeur de l'
description
.init?(_ description: String)
Docs ici https://developer.apple.com/reference/swift/string/1540435-init
OriginalL'auteur Ramsel