命令因信号而失败:分段错误 11 -- Xcode 8 Swift 3

Command Failed due to signal: Segmentation Fault 11 -- Xcode 8 Swift 3

经过激烈的谷歌搜索和头脑风暴后,我找不到解决方案,所以让我们看看 Stack Overflow 是否有我需要的神奇解决方案。我正在使用联系人框架从联系人中获取日期。但是,这很有效,但我需要对日期进行排序才能使其正常工作。因此,我是 extending ArrayCNContact,并且在扩展中我有一个功能可以完成我的工作。 Issue Navigator 中没有显示错误,但是当我构建时,我在 Report Navigator 中遇到问题,说 Command Failed due to signal: Segmentation Fault 11。我真的相信问题出在我对泛型的使用上,因为报告导航器指向那条线,我的谷歌搜索表明这就是问题的来源,但我没有解决方法。 (我高度怀疑这一点,但我不完全确定。)

让我与您分享我的代码: 这是我对 CNContacts 数组的扩展。

typealias ContactDate = CNLabeledValue<NSDateComponents>
func filteredAndSortedDates() -> [ContactDate : CNContact] { // Error occurs on this line according to the issue.

    var allDates: [ContactDate : CNContact] = [:]

    var sortedDates: [ContactDate: CNContact] = [:]


    for contact in self {
        if contact.isKeyAvailable(CNContactDatesKey) {
            for date in contact.dates {
                allDates[date] = contact
            }
        }
    }

    for (key, value) in (Array(allDates).sorted {
        date1, date2 in
        if date1.key.value.month == date2.key.value.month {
            return date1.key.value.day < date2.key.value.day
        } else {
            return date1.key.value.month < date2.key.value.month
        }
    }) {
        sortedDates[key] = value
    }

    return sortedDates
}

问题截图如下:

当您将空字典分配给 allDates and/or sortedDates:

时,您的代码导致 Swift 编译器崩溃
var allDates: [ContactDate: CNContact] = [:]
var sortedDates: [ContactDate: CNContact] = [:]

起初我以为是CNLabeledValue不符合Hashable,但我不认为这是你的代码的问题。例如,这会使编译器崩溃:

var crashingDict: [CNLabeledValue<NSDateComponents>: CNContact] = [:]

但事实并非如此:

 var workingDict: [CNContact: CNLabeledValue<NSDateComponents>] = [:]

在第二个示例中,CNContact 作为键也不符合 Hashable

我的建议是交换字典中的值并让您的代码以这种方式工作。最好向 Apple 提交错误报告。