2015-11-15 45 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

這很好,爲什麼這不工作?:let userProfileEmail = userDocument.valueForKey(「emails」)![0]我得到錯誤:'subscript'的模糊使用 – KML

+0

首先,不要使用'valueForKey',這是一個關鍵值編碼方法具有特殊的意義。關於你的問題:因爲當整個表達式寫入一行時,編譯器不能肯定地推斷'emails'的類型。 – vadian

+0

斯威夫特是非常依賴類型/依賴/敏感,是一個正確的評估? – KML