Soy un principiante en Swift y estoy migrando una aplicación para Swift 3.0

Sigo teniendo este error y no tengo idea de cómo resolverlo.

«No se puede invocar el «valor» con una lista de argumentos de tipo ‘(Cadena)'»

Aparece en casi cada línea de este fragmento.
¿Tiene usted alguna idea de dónde podría provenir?
Muchas gracias

        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

            }

        }

Como se pide aquí es más información acerca de los Mensajes

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

Aquí es incluso más información

        //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
    }
Lo message ¿y por qué estás colada a AnyObject?
Me dio más información acerca de los mensajes. No estoy seguro de por qué es fundidas como Anyobject :/

OriginalEl autor Quentin Del | 2017-02-07

3 Comentarios

  1. 5

    Usted probablemente necesita para cambiar a (message as AnyObject).value(forKey:"···") (añadiendo el forKey: etiqueta).

    ¿Sabe usted qué tipo de objeto message se supone que? Repetidamente casting para AnyObject es impar. Sería limpiador para crear una nueva variable let messageObject = message as AnyObject y, a continuación, llamar a messageObject.value(forKey:"···"). (Sospecho que realmente quieren echar a Dictionary o algo por el estilo, en cuyo caso usted puede hacer messageDictionary["···"] en lugar de llamar a value(forKey:).)

    También, en Swift usted puede hacer esto para reducir la redundancia aún más:

    if let content = messageObject.value(forKey:"content") as? String {
      stringContent = content
    }
    La adición de «forKey» solucionado el problema.

    OriginalEl autor Uncommon

  2. 1

    Si message es json diccionario, a continuación, echó a [String:Any] y, a continuación, utilizar subíndice con ella.

    if let dic = message as? [String:Any] {
        stringContent = dic["content"] as? String ?? ""
    }

    O

    Si message es el tipo de Messages entonces usted puede tener acceso a su propiedad directamente a través de message.content y de la misma manera se puede acceder a otras propiedades también.

    stringContent = message.content
    Cuando intento si ((mensaje.contenido != nil){ stringContent = ((mensaje como AnyObject).valor(forKey:»contenido») como? Cadena)! } se dice que el Valor de tipo ‘NSFastEnumerationIterator.El elemento’ (aka ‘Cualquier’) no tiene ningún miembro de «contenido» y propone un cambio a si (((mensaje como AnyObject).contenido != nil)
    Usted necesita mostrar cómo usted está recibiendo el valor en message decir, cómo te han inicializado el message que nos dará idea.
    He actualizado el post con más información sobre el mensaje. El problema se ha resuelto ahora, pero siempre estoy dispuesto a aprender a escribir mejor código. Muchas gracias por tu ayuda.
    Todavía no entiendes lo que quiero pedir es el var message que se han utilizado aquí (message as AnyObject).value("content") != nil). Estoy preguntando sobre ese mensaje variable de Cómo se han initailized que aún no añadir ese código. Si es diccionario, subíndice funcionará sin necesidad de conversión de tipo a Anyobject y no hay necesidad de utilizar valueForKey.

    OriginalEl autor Nirav D

  3. 0

    Si usted está recibiendo este error en la prueba (por ejemplo, utilizando LLReactiveMatchers's sendValues()), trate de hacer que su tipo (struct/clase) conformar a la Equatable.

    OriginalEl autor danielhadar

Dejar respuesta

Please enter your comment!
Please enter your name here