segue到详细视图控制器
我有一个视图控制器与集合视图,当我点击集合视图的单元格时,我想继续进入一个控制器,该控制器拥有单击我所单元格的用户的所有帖子。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
后字典包含值为“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]]
行'vc.posts = postsForUser //vc.posts应该是[[String:Any]]'我得到错误不能分配值的类型'[[String:任何]]'键入'NSMutableArray'Insert'as! NSMutableArray',但当我这样做时,它仍然崩溃 – juelizabeth
更改UsersProfileViewController帖子类型为[[String:Any]] – suhit
非常感谢你! – juelizabeth
postsForUser问题崩溃是[Any]类型(即数组)。这不是一个NSMutableArray。你强制转换到NSMutableArray会崩溃,所以它必须崩溃。
因此,请考虑postsForUser您真正想要的类型并保持一致。另外,避免使用as!因为它只是要求崩溃。这只适合在一个非常狭窄的情况下。
所以我将postsForUser更改为NSMutableArray'let postsForUser = posts.filter {guard let post = $ 0 as? [String:Any] else {return false};返回职位[“用户名”]为? String == name} as! NSMutableArray',但现在我得到这条线上的错误 – juelizabeth
什么是崩溃和在哪一行? – Smartcat
@Smartcat'vc.posts = postsForUser as! NSMutableArray' – juelizabeth