我有以下代码:
class User {
var listsDict : [String : List]!
func addList (list : List) -> Void {
print(list.name)
listsDict[list.name] = list
}
func listForName (name: String) -> List? {
return listsDict[name]
}
}
class List {
let name : String
var movies : Set<String>
init(name: String){
self.name = name
movies = Set<String>()
}
func printList (){
print(movies)
}
}
var list = List(name: "List")
list.movies = Set<String>(["LOTR", "SAW", "POC"])
list.printList()
var johny = User()
johny.addList(list: list)
当我致电johny.addList(list: list)
时,我收到了错误消息:
unexpectedly found nil while unwrapping an Optional value
但是有价值。我之前创建了列表实例,甚至打印在列表的日志名称中(并且已成功打印)。为什么我收到错误?
答案 0 :(得分:2)
发生错误是因为listsDict
被声明为隐式展开可选,但未已初始化。
不使用隐式展开的可选属性,而是将字典初始化为非可选
var listsDict = [String : List]()
答案 1 :(得分:2)
每当我发现这个错误的尝试。我只是在步骤
下执行此操作只需print("variable name")
。
然后我用
if <variable name> != nil {
}else{
}
这是我处理这类错误的方法。
答案 2 :(得分:1)
您没有为User.listsDict分配值,因此当您尝试向其添加值时,它会为nil。只是部分原因!除非你绝对必须,否则不应该使用。在这种情况下,你不会。
var listsDict : [String : List]!
应该是
var listsDict = [String : List]()
答案 3 :(得分:1)
由于方法中的listsDict[list.name] = list
,您收到错误:
func addList (list : List) -> Void {
print(list.name)
listsDict[list.name] = list
}
你宣布它为:
var listsDict : [String : List]!
在未初始化的情况下附加到字典应该会导致此错误,您应该首先将其初始化(var listsDict = [String : List]()
),我建议将其声明为 lazy 变量:
lazy var listsDict = [String : List]()
并且您的代码应该可以正常工作。