Ne peut pas invoquer la "valeur" avec une liste d'arguments de type '(String)'
Je suis un débutant en Swift et je suis de la migration d'une application de Swift 3.0
Je continue à avoir cette erreur et je n'ai aucune idée de comment le résoudre.
"Ne peut pas invoquer la "valeur" avec une liste d'arguments de type '(String)'"
Il est affiché à près de chaque ligne de cet extrait.
Avez-vous une idée d'où cela pourrait provenir?
Merci beaucoup
if ((message as AnyObject).value("content") != nil){
stringContent = (message as AnyObject).value("content") as? String
}
if ((message as AnyObject).value("sender_uuid") != nil){
stringSenderUuid = (message as AnyObject).value("sender_uuid") as? String
}
if ((message as AnyObject).value("recipient_uuid") != nil){
stringRecipientUuid = (message as AnyObject).value("recipient_uuid") as! String
}
if ((message as AnyObject).value("date") != nil){
if let result_number = (message as AnyObject).value("date") as? NSNumber
{
stringDate = "\(result_number)"
}
else {
stringDate = (message as AnyObject).value("date") as! String
}
}
Comme demandé ici plus d'informations sur les Messages
class Messages: Object {
dynamic var channel_name = ""
dynamic var content = ""
dynamic var sender_uuid = ""
dynamic var recipient_uuid = ""
dynamic var date = ""
dynamic var message_uuid = ""
override class func primaryKey() -> String? {
return "message_uuid"
} }
let message = Messages()
message.channel_name=channel_name
message.content=stringContent
message.sender_uuid = stringSenderUuid
message.recipient_uuid = stringRecipientUuid
message.date = stringDate
message.message_uuid = stringUuid
Est, ici, encore plus d'informations
//initialize with nothing
var stringContent = " "
var stringSenderUuid = " "
var stringRecipientUuid = " "
var stringDate = " "
var stringUuid = " "
//We check for existence in the dictionnary
if (message["content"] != nil){
stringContent = message["content"] as! String
}
if (message["sender_uuid"] != nil){
stringSenderUuid = message["sender_uuid"] as! String
}
if (message["recipient_uuid"] != nil){
stringRecipientUuid = message["recipient_uuid"] as! String
}
if (message["date"] != nil){
if let result_number = message.value(forKey: "date") as? NSNumber
{
stringDate = "\(result_number)"
}
else {
stringDate = message.value(forKey: "date") as! String
}
}
if (message["uuid"] != nil){
stringUuid = message["uuid"] as! String
}
Ce qui est
J'ai donné plus d'informations sur les messages. Je ne suis pas sûr pourquoi elle se répartit comme Anyobject :/
message
et pourquoi êtes-vous un moulage AnyObject
?J'ai donné plus d'informations sur les messages. Je ne suis pas sûr pourquoi elle se répartit comme Anyobject :/
OriginalL'auteur Quentin Del | 2017-02-07
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement besoin de les changer pour
(message as AnyObject).value(forKey:"···")
(ajout de laforKey:
étiquette).Savez-vous de quel type d'objet
message
est censé être? À plusieurs reprises moulageAnyObject
est impair. Il serait plus propre de créer une nouvelle variablelet messageObject = message as AnyObject
et ensuite appelermessageObject.value(forKey:"···")
. (Je soupçonne que vous voulez vraiment pour le jeter auxDictionary
ou quelque chose comme ça, dans ce cas, vous pouvez fairemessageDictionary["···"]
au lieu de l'appelervalue(forKey:)
.)Aussi, dans Swift vous pouvez faire pour réduire la redondance même plus:
OriginalL'auteur Uncommon
Si
message
est json dictionnaire puis il la jeta à[String:Any]
et ensuite utiliser l'indice.OU
Si
message
est le type deMessages
ensuite, vous pouvez accéder à sa propriété directement à l'aide demessage.content
et de la même façon, vous pouvez accéder à d'autres propriétés.Vous devez montrer combien vous obtenez la valeur dans
message
signifie la façon dont vous avez initialisé lamessage
qui va nous donner l'idée.J'ai mis à jour mon post avec plus d'informations sur le message. Le problème est résolu maintenant, mais je suis toujours désireux d'apprendre à mieux écrire le code. Merci beaucoup pour votre aide.
Tu ne comprends toujours pas ce que j'ai poser le var
message
que vous avez utilisé ici(message as AnyObject).value("content") != nil)
. Je pose la question à propos de ce message variable de la Façon dont vous avez initailized, vous n'avez pas ajouter ce code. Si c'est le dictionnaire, indice fonctionnera pas besoin de taper à jeter aux Anyobject et pas besoin d'utiliservalueForKey
.OriginalL'auteur Nirav D
Si vous obtenez cette erreur dans les tests (par exemple à l'aide de
LLReactiveMatchers's
sendValues()
), essayez de faire de votre type (struct/classe) se conformer àEquatable
.OriginalL'auteur danielhadar