segue到详细的视图控制器

时间:2017-10-12 04:07:02

标签: ios swift xcode firebase

我有一个带有集合视图的视图控制器,当我点击集合视图的单元格时,我想要进入一个控制器,该控制器包含我单击的单元格的用户所有的帖子。

var posts = NSMutableArray()

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "UsersProfile" {
   let vc = segue.destination as! UsersProfileViewController
   let postsForUser = posts.filter {
       guard let post = $0 as? [String : Any] else { 
          return false 
       }  
       return post["username"] as? String == selectedUserName 
   }
   print("postForUser = \(postsForUser)")
   vc.posts = postsForUser as! NSMutableArray
  }
}

当我使用xcode 8时,它工作得非常好,当我更新到xcode 9时,当我点击单元格时它会崩溃,我不确定如何识别xcode 9中的问题。

2 个答案:

答案 0 :(得分:1)

邮件字典包含值&#34;用户名&#34; key是一个String类型,因此过滤器将返回val imageView: ImageView = findViewById<ImageView>("R.id.imageView_" + index) as ImageView 或[[String:Any]]的数组,而不是NSMutableArray。另外Dictionary<String, Any>是Objective-C集合类型,不在Swift中使用。所以ProfileViewController中的帖子应该是NSMutableArray

类型
[[String: Any]]

答案 1 :(得分:0)

postsForUser的类型为[Any](即数组)。它不是NSMutableArray。你强迫一个强制转换为NSMutableArray,因为它必须崩溃。

所以想想你对postsForUser真正想要什么类型并保持一致。另外,避免使用as!因为它只是要求崩溃。它只适用于非常狭窄的情况。