2016-09-13 21 views
1

我有ArrayNSDictionary名爲deejayTweetsDictionary。在可選的密鑰likes內的是的NSDictionary斯威夫特/如何檢查是否存在可選值

現在我想檢查一下:user == likes?.valueForKey(user) as! String

只要userlikes之內,我的代碼就能正常工作。如果我與其他帳號登錄 - 與其他user,在應用程序崩潰:

if likes?.valueForKey(user) as! String == user { 

如何查看我的if語句,如果likes是可選的,能夠容納不同userNSDictionaries

 let tweets = deejayTweetsDictionary[indexPath.row] 

     let likes = tweets.valueForKey("likes") 
     let user = backendless.userService.currentUser.objectId 

     if likes != nil { 

      if likes?.valueForKey(user) as! String == user { 
       cell.liked = 1 
      } else { 
       cell.liked = 0 
      } 
     } 

enter image description here

還是那句話:likes可能包含[user:user]

問題的無窮數:如何查詢我如果萬一user說法是不內likes?非常感謝幫助。

+0

請閱讀Swift語言指南 – vadian

回答

2

的崩潰是因爲在該行

if likes?.valueForKey(user) as! String == user { 

嘗試這種方式迫使展開的:

if let userExist = likes?.valueForKey(user) as? String where userExist == user { 

     //Do your work. 
} 

你必須使用這個可選的結合或保護關鍵字。

+0

這一章*基礎*,這對我來說非常完美。非常感謝你 –

+0

很高興幫助你。 – Amit89

1

我不確定是否正確理解您的答案。解包可選值時,應用程序崩潰了嗎?

// 1. Unwrap 
if let likesUser = likes?.valueForKey(user) as? String { 
    if user == likesUser { 
     //... 
    } 
} 

// 2. Using guard 
guard let likesUser = likes?.valueForKey(user) as? String else { 
    return 
} 

if likesUser == user { 
    //... 
} 
+0

非常感謝你的努力,但其他答案很容易爲我做 –