2015-11-15 3 views
0

У меня есть объект, который выглядит так в консоли. Это похоже на массив со словарем внутри. Как я могу попасть в поле адреса?Как индексировать в массив словарей

Optional((
     { 
     address = "[email protected]"; 
     verified = 1; 
    } 
)) 

Объект приходит от этого объекта:

<METDocument key: <collection: users, ID: KTsCySacEAiz3eDnf>, fields: { 
    emails =  (
       { 
      address = "[email protected]"; 
      verified = 1; 
     } 
    ); 
    profile =  { 
     address =   { 
      city = Oslo; 
      country = nor; 
      lineOne = "address"; 
      lineTwo = ""; 
      zip = 0264; 
     }; 
     birthdate = "1985-09-01 23:00:00 +0000"; 
     card =   { 
      last4 = 4242; 
      verified = 1; 
     }; 
     filledOut = 1; 
     gender = Male; 
     name =   { 
      first = "Elon"; 
      last = "Musk"; 
     }; 
     phone = 911; 
     validated = 1; 
    }; 
}> 

я получить доступ к ключу электронных писем с помощью этого метода:

let emails = users.allDocuments[0].valueForKey("emails") 

ответ

1

Содержание объекта является дополнительным массивом.

Есть два варианта:

  • Безопасный доступ:

    if let emails = users.allDocuments[0].objectForKey("emails") where emails.count > 0 { 
        if let address = emails[0]["address"] as? String { 
        print(address) 
        } 
    } 
    
  • Если это гарантирует, что словарь в массиве, и ключ address существует:

    let emails = users.allDocuments[0].objectForKey("emails")! 
    let address = emails[0]["address"] as! String 
    
+0

Это отлично работает, почему s это не работает ?: let userProfileEmail = userDocument.valueForKey («emails»)! [0] Я получаю ошибку: Неоднозначное использование «индекса» – KML

+0

Прежде всего, не используйте 'valueForKey', это метод кодирования ключевых значений с особым значением. Что касается вашего вопроса: поскольку компилятор не может определенно вывести тип «сообщений электронной почты», когда все выражение написано в одной строке. – vadian

+0

Swift чрезвычайно зависим от типа/зависит/чувствителен, это правильная оценка? – KML

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