经过一番激烈的谷歌搜索和头脑风暴后,我找不到解决方案,所以让我们看看Stack Overflow是否有我需要的神奇解决方案。我正在使用Contacts框架从联系人中获取日期。但是,这很好用,但我需要对日期进行排序才能使其正常工作。因此,我extending
Array
CNContact
,在扩展程序中,我有一个功能来完成我的工作。 Issue Navigator
中没有显示任何错误,但是当我构建时,我在Report Navigator
说Command Failed due to signal: Segmentation Fault 11
时遇到了问题。我真的相信问题在于我使用Generics,因为报告导航器指向那条线,我的谷歌搜索表明这是问题的来源,但我没有解决方法。 (我非常怀疑这一点,但我不完全确定。)
让我与您分享我的代码: 这是我对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
}
答案 0 :(得分:1)
当您将空字典分配给allDates
和/或sortedDates
时,您的代码导致Swift编译器崩溃:
var allDates: [ContactDate: CNContact] = [:]
var sortedDates: [ContactDate: CNContact] = [:]
起初我认为这是由于CNLabeledValue
不符合Hashable
但我不认为这是您的代码的问题。例如,这会使编译器崩溃:
var crashingDict: [CNLabeledValue<NSDateComponents>: CNContact] = [:]
但这不是:
var workingDict: [CNContact: CNLabeledValue<NSDateComponents>] = [:]
在第二个示例中,CNContact
作为键也不符合Hashable
。
我的建议是交换dict中的值并让代码以这种方式工作。最好向Apple提交错误报告。