在一个键下附加数据数组

时间:2018-01-28 17:27:28

标签: swift

我想将数据附加到数组中。我的阵列需要看起来像这样:

  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"下附加所有数据?例如?

1 个答案:

答案 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)