У меня было следующее определение структуры, которое получало бы сбой во время выполнения в сборках Release, но не в сборках Debug.Неинициализированная переменная или, возможно, разница в порядке инициализации?
struct Location:Codable {
struct Commute {
static let Times = [
["seconds" : 30],
["seconds" : 45],
["seconds" : 60],
["seconds" : 90]
]
static let count = Commute.Times.count
/*
next code line crashes on initialisation
XCode: specialized _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds(_:wasNativeTypeChecked:) [inlined]
*/
static let Default = Commute.Times[Commute.Times.endIndex]
...
}
}
Похоже, что мое использование Commute.Times.endIndex
используется немного раньше, чем инициализируется Commute.Times
, так что endIndex
не имеет ссылок.
Я могу обойти это, заменив 'оскорбительную' строку на:
static let Default = Commute.Times[Commute.count - 1]
Правильно ли я использовал static
и правильно определил структуру?Это мое понимание в этой области, которое я хочу уточнить.
Бонус: есть ли более чистый способ установить Default
для последнего элемента Times
, чем указание count - 1
?