Я решил создать свою собственную структуру SortableDictionary
в Swift, построив ее на игровой площадке Xcode, чтобы я мог ее протестировать, когда я пошел. SortableDictionary
работает, беря словарь и функцию сортировки и используя функцию сортировки для создания отсортированного массива ключей из словаря. Он может сортировать по словарным клавишам или значениям словаря и иметь отдельные сортировки для каждого (с помощью значения Bool для переключения между ними). Я знаю, что findInsertionIndex
работает так, как предполагается, и я уверен в insert
и sort
. Но всякий раз, когда я пытался создать SortableDictionary
экземпляр я все не получаюСортировка словарных сбоев при запросе сортировки
Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode-0x0)
независимо от того, что я пытался. После публикации на прослушивании я обнаружил, что ошибка возникает только тогда, когда SortableDictionary имеет дело со словарем с более чем одним значением. Передайте ему словарь с одним или без значений, и он будет работать. Таким образом, это будет работать:
let collection: [String: Double] = ["Bananas": 5]
var sortedDictionary2 = SortableDictionary(dictionary: collection, sortByValues: true, valueSortKey: {$0 < $1}, keySortKey: {$1 < $0})
var collection: [String: Double] = ["Bananas": 5]
var sortedDictionary2 = SortableDictionary(dictionary: collection, sortByValues: true, valueSortKey: {$0 < $1}, keySortKey: {$1 < $0})
Но это не будет:
let collection: [String: Double] = ["Bananas": 5, "Dates": 3]
var sortedDictionary2 = SortableDictionary(dictionary: collection, sortByValues: true, valueSortKey: {$0 < $1}, keySortKey: {$1 < $0})
var collection: [String: Double] = ["Bananas": 5, "Dates": 3]
var sortedDictionary2 = SortableDictionary(dictionary: collection, sortByValues: true, valueSortKey: {$0 < $1}, keySortKey: {$1 < $0})
Затем я вырезал сортировки, вставки, и два метода findInsertionIndex от структуры SortableDictionary вместе со всеми Неправительственными рассчитан глобальными переменными , Это переместил ошибку в строке в findInsertionIndex (версия ключа сортировки):
if (keySortKey!(sortedKeys[upperBound], key))
это несмотря на то, что sortingByValues было правдой, которая означает, что функция не должна была когда-либо даже называли (я проверил это, sortingByValues верно во время инструкции if, но Xcode настаивает на том, чтобы вместо этого выполнить ветку else). Итак, я переписал код минимального минимума, чтобы перейти от использования глобальных переменных к параметрам, переданным в каждую функцию. Это переместили код ошибки в строке в вкладышем:
sortedKeys = sortedKeys.filter {$0 != key}
Число пар ключ: значение в словаре больше не оказывает какого-либо влияния на ошибку. Я до сих пор не знаю, что происходит, но я создал Gist для моего сортируемого словаря и добавлю обе версии моего модифицированного функционального кода до конца (используйте только по одному). Вот мой Сортируемый словарь код:
https://gist.github.com/7OOTnegaTerces/6277116470d03b4676c5
Я рад, что вы уверены в своем коде, но когда я копирую/вставляю ваш gist на площадку, я получаю три отдельных ошибки компиляции. –
@ DanielT. Не могли бы вы быть более конкретными? Как что и где?!? Вы импортировали Фонд? –
Вы используете функцию 'round' в двух местах, которые не определены в gist, и вам не хватает'! 'В одном месте. Я уверен, что если вы скопируете свой паштет на пустую площадку, вы увидите те же проблемы. –