2017-02-07 2 views
2

Я новичок в Swift и Я проникаю приложение для Swift 3.0не может ссылаться на «значения» со списком аргументов типа «(String)»

Я постоянно имея эту ошибку, и я не знаю, как реши это.

«не может ссылаться на„значения“со списком аргументов типа„(String)“»

Оно отображается в почти каждой строке этого фрагмента. Вы не знаете, откуда это взялось? Большое спасибо

 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 

      } 

     } 

В соответствии с просьбой здесь больше информации о Сообщения

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 

Вот еще больше информации

 // 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 
    } 
+2

Что такое 'сообщение' и почему вы его отправляете в' AnyObject'? – Hamish

+0

Я дал больше информации о сообщениях. Я не уверен, почему он заброшен как Anyobject:/ –

ответ

3

Вы, вероятно, нужно изменить их (message as AnyObject).value(forKey:"···") (добавление forKey: метка).

Знаете ли вы, что это за объект message? Неоднократно бросается на AnyObject. Было бы проще создать новую переменную - let messageObject = message as AnyObject, а затем позвонить по номеру messageObject.value(forKey:"···"). (Я подозреваю, что вы действительно хотите, чтобы привести его к Dictionary или что-то в этом роде, в этом случае вы можете сделать messageDictionary["···"] вместо вызова value(forKey:).)

Кроме того, в Swift вы можете сделать это, чтобы уменьшить избыточность даже больше:

if let content = messageObject.value(forKey:"content") as? String { 
    stringContent = content 
} 
+1

Добавление «forKey» исправило проблему. –

1

Если message - это словарь json, то наберите его [String:Any], а затем используйте индекс.

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

ИЛИ

Если message является тип Messages, то вы можете получить доступ к его напрямую с message.content и таким же образом, вы можете получить доступ другие свойства тоже.

stringContent = message.content 
+0

Когда я пытаюсь если ((message.content = nil) { stringContent = ((сообщение как AnyObject) .value (forKey:?! "Содержание") в String) }! он говорит Значение типа ' NSFastEnumerationIterator.Element '(aka' Any ') не имеет содержания участника' и предлагает изменить на , если (((сообщение как AnyObject) .content! = Nil) –

+1

@QuentinDel Вам нужно показать, как вы получаете ценность в 'message' означает, что вы инициализировали« сообщение », которое даст нам идею. –

+0

Я обновил сообщение с дополнительной информацией о сообщении. Проблема исправлена, но я всегда готов научиться писать лучший код. много для вашей помощи. –

Смежные вопросы