我试图用数据填充集合视图,所以我正在做这样的事情:
cell.userImage.sd_setImage(with: URL(string: user[indexPath.row].imagePath))
cell.nameLabel.text = user[indexPath.row].username
cell.userID = user[indexPath.row].userID
所有这些都抛出错误,说该值是nil,但是我正在代码行之前打印这些值,而这些值也不是nil。
我用以下命令填充用户字典:
let userToShow = User()
if let username = value["username"] as! String?, let imagePath = value["urlToImage"] as! String? {
userToShow.username = username
userToShow.imagePath = imagePath
userToShow.userID = uid
self.user.append(userToShow)
print(userToShow)
}
User类看起来像这样
class User: NSObject {
var userID: String!
var username: String!
var imagePath: String!
}
我不太确定这些可选选项如何快速工作,因此也许我没有声明正确的方法。
答案 0 :(得分:1)
有两个严重的问题都可能导致崩溃:
从不将类中的属性声明为隐式,未包装的可选属性,这是不编写初始化程序的不在场证明。可以使用初始化程序将其声明为非可选
class User: NSObject {
var userID: String
var username: String
var imagePath: String
init(userID: String, username: String, imagePath: String) {
self.userID = userID
self.username = username
self.imagePath = imagePath
}
}
或作为常规可选
class User: NSObject {
var userID: String?
var username: String?
var imagePath: String?
}
您真的需要一个类-甚至从NSObject
继承吗?您真的需要var
个元素吗?
强制将可选选项包装为可选(value["username"] as! String?
)听起来不合逻辑,这是非常不好的做法。不要那样做正确的可选绑定语法是
if let username = value["username"] as? String
请阅读《 Swift语言指南》中有关Optionals的部分
答案 1 :(得分:0)
在我的restorePosts()函数中,有一行显示了self.user.removeAll()。我想这是导致我去创建单元格时删除字典的原因。