2016-09-13 25 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

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