2017-10-12 171 views
0

我有一个视图控制器与集合视图,当我点击集合视图的单元格时,我想继续进入一个控制器,该控制器拥有单击我所单元格的用户的所有帖子。segue到详细视图控制器

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

+0

什么是崩溃和在哪一行? – Smartcat

+0

@Smartcat'vc.posts = postsForUser as! NSMutableArray' – juelizabeth

回答

1

后字典包含值为“String”类型的“username”键,因此筛选器将返回数组Dictionary<String, Any>或[[String:Any]]而非NSMutableArray。另外NSMutableArray是Objective-C的集合类型,没有在Swift中使用。因此,ProfileViewController中的帖子应该是[[String: Any]]

let postsForUser: [[String: Any]] = posts.filter { 
    guard let post = $0 as? [String : Any] else { 
     return false 
    } 
    return post["username"] as? String == selectedUserName 
} 
print("postForUser = \(postsForUser)") 
vc.posts = postsForUser //vc.posts should be [[String: Any]] 
+0

行'vc.posts = postsForUser //vc.posts应该是[[String:Any]]'我得到错误不能分配值的类型'[[String:任何]]'键入'NSMutableArray'Insert'as! NSMutableArray',但当我这样做时,它仍然崩溃 – juelizabeth

+0

更改UsersProfileViewController帖子类型为[[String:Any]] – suhit

+0

非常感谢你! – juelizabeth

0

postsForUser问题崩溃是[Any]类型(即数组)。这不是一个NSMutableArray。你强制转换到NSMutableArray会崩溃,所以它必须崩溃。

因此,请考虑postsForUser您真正想要的类型并保持一致。另外,避免使用as!因为它只是要求崩溃。这只适合在一个非常狭窄的情况下。

+0

所以我将postsForUser更改为NSMutableArray'let postsForUser = posts.filter {guard let post = $ 0 as? [String:Any] else {return false};返回职位[“用户名”]为? String == name} as! NSMutableArray',但现在我得到这条线上的错误 – juelizabeth

相关问题