Как отлаживать "фатальную ошибку: неожиданно найдено нуль при развертывании необязательного значения"
Есть много вопросов о переполнении стека, связанных с этой ошибкой. Ive прочитал несколько отличных сообщений на как работают функции Option и эта ошибка, в частности. Тем не менее, я не нашел никакой информации о том, как лучше всего определить, какое значение установлено на нуль, и в первую очередь вызывая ошибку.
Есть ли хорошие методы отладки, чтобы выяснить, какая опция вызывает эту ошибку?
Ответы
Ответ 1
Здесь, по крайней мере, половина ответа (другие респонденты, пожалуйста, сначала прочитайте вопрос!): Используйте симулятор вместо реального устройства iOS.
Отладчик, похоже, очень хорошо указывает на линию с оплошностью maltreated, которая вызывает проблемы... если вы не похожи на меня, вы выбираете время от времени запускать код на устройстве iOS. В последнем случае отладчик набирает меня прямо в середине некоторого кода ассемблера без разумной трассировки стека. Возврат к симулятору дает точный код неисправности.
Ответ 2
У вас Xcode не сбой при неправильной строке кода?
Это не ответ на вопрос, но важно отметить:
When you are not sure about an optional variable, you have to verify if it contains value or not, by using a pattern like this:
var myOptional : String?
if let aString = myOptional {
//do your work with aString.
}
Ответ 3
Какое в основном необязательное значение - "?" когда вы размещаете? после того, как тип данных является необязательным, а если он развернут и появляется нуль, то нет ошибки, но вы помещаете "!". восклицательный знак после типа данных, тогда, если он разворачивает переменную и появляется nil, тогда происходит сбой или ошибка, поэтому часто используйте необязательный параметр
var myVariable : DataType ? = DataType()
or
var myVariable : DataType ? = nil
or
var myVariable : DataType ? = value
Необязательный параметр Swift - это переменная, которая может содержать значение или значение. Варианты написаны путем добавления a? к типу:
var myOptionalString:String? = "Hello"
В некоторых местах могут использоваться дополнительные опции:
- Когда свойство может быть там или нет, например, middleName или супруга
в классе Person
- Когда метод может вернуть значение или ничего, например
поиск соответствия в массиве
- Когда метод может вернуть результат или получить ошибку и
вернуть ничего
- Свойства делегата (которые не всегда должны быть установлены)
- Для слабых свойств в классах. То, на что они указывают, может
задано значение nil
- Для большого ресурса, который может быть выпущен в
вернуть память
https://medium.com/@rrridges/swift-optionals-a10dcfd8aab5