我想将数据附加到数组中。我的阵列需要看起来像这样:
key -> date 1
values -> event 1
values -> event 2
date 2
event 1
event 2
event 3
所以我创建了这个数组:
var data : [String : [Event]]!
但是当我想将数据附加到它时,我收到以下错误:
Fatal error: Unexpectedly found nil while unwrapping an Optional value
这对我有意义,所以我更换了!与 ?。但是根本没有任何事情发生。
var data : [String : [Event]]!
override func viewDidLoad() {
super.viewDidLoad()
var monday : [Event] = []
monday.append(Event(title: "test", timeFrom: "09:00", timeTo: "10:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "10:00", timeTo: "11:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "13:30", timeTo: "14:30", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "18:30", timeTo: "19:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "19:00", timeTo: "20:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "19:00", timeTo: "20:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "20:00", timeTo: "20:45", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "20:00", timeTo: "21:00", maxPlaces: 20, placesFilled: 15))
monday.append(Event(title: "test", timeFrom: "20:00", timeTo: "21:00", maxPlaces: 20, placesFilled: 15))
data["2018/01/28"]!.append(contentsOf: monday)
}
所以我的问题是,如何在星期一的关键字" 2018/01/28"下附加所有数据?例如?
答案 0 :(得分:2)
该行:
var data : [String : [Event]]!
仅为声明。它实际上并没有创建字典。它声明它是隐式展开的。
你想要的是:
var data = [String : [Event]]()
这两者都声明字典并将其初始化为空字典。
此外,在viewDidLoad
结束时,请更改:
data["2018/01/28"]!.append(contentsOf: monday)
为:
data["2018/01/28"] = monday
您的代码会崩溃,因为data["2018/01/28"]
的结果为nil
,然后您强制解包nil
。
如果实际上可能已存在该日期的数据,那么您应该:
var array = data["2018/01/28"] ?? []
array.append(contentsOf: monday)
data["2018/01/28"] = array
这将获取当前数组。如果没有当前数组,则会创建一个新的空数组。然后它将新值附加到数组。然后它将更新数组放入字典中。
在Swift 4中,这三行可以缩短为:
data["2018/01/28", default: []].append(contentsOf: monday)