Ноль / ноль на быстром языке
Как бы мы определили следующее в быстром языке программирования:
- ноль
- ноль
- ноль
- [NSNull null]
Другими словами, что было бы быстрым эквивалентом каждого из этих объективных терминов. Кроме того, также хотелось бы знать, существуют ли какие-либо конкретные варианты использования для нецелевых типов c, таких как структуры и перечисления. Заранее спасибо.
7 ответов
Относительно эквивалентов:
NULL
не имеет эквивалента в Swift.nil
также называетсяnil
в СвифтеNil
не имеет эквивалента в Swift[NSNull null]
можно получить доступ в Swift как NSNull()
Примечание: это мои догадки, основанные на чтении и игре. Исправления приветствуются.
Но обработка nil/NULL в Swift очень отличается от Objective C. Она выглядит так, чтобы обеспечить безопасность и заботу. Читайте об опциях в руководстве. Вообще говоря, переменная вообще не может быть NULL, и когда вам нужно представить "отсутствие значения", вы делаете это декларативно.
Если вам нужно использовать NULL при операциях с указателями низкого уровня, используйте следующее:
UnsafePointer<Int8>.null()
nil
означает "не имеет значения", но полностью отличается во всех других смыслах от Objective-C nil
,
Это присваивается только необязательным переменным. Он работает как с литералами, так и со структурами (т. Е. Он работает со стековыми элементами, а не только с кучей).
Необязательные переменные не могут быть назначены nil
даже если они классы (то есть они живут в куче).
Так что это явно не NULL
указатель и не похож на один. Он разделяет имя, потому что он предназначен для использования по той же семантической причине.
Свифта nil
это не то же самое, что nil
в Objective-C.
В Objective-C, nil
указатель на несуществующий объект В Свифте nil
это не указатель - это отсутствие значения определенного типа. Дополнительные опции любого типа могут быть установлены на nil
, а не только типы объектов.
NULL
не имеет эквивалента в Swift.
nil
также называется ноль в Swift
Nil
не имеет эквивалента в Swift
[NSNull null]
можно получить доступ в Swift как NSNull()
Концепция Null в Swift возвращается к необязательному перечислению. Перечисление определяется так
enum Optional<T> {
case Some(T)
case None
}
Это означает, что вы не можете иметь неинициализированную переменную / константу в Swift. Если вы попытаетесь это сделать, вы получите ошибку компилятора, говорящую о том, что переменная / константа не может быть неинициализирована. Вы должны будете обернуть это в Дополнительное перечисление.
Это единственная концепция Null, которую вы найдете в Swift
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}
У меня была эта проблема в проблемном сценарии: комплект настроек
Чтобы кто-то не тратил свое время (как я его потерял!)
let userDefaults = UserDefaults.standard
var settingsValue = userDefaults.string(forKey: "user_preference")
if settingsValue == nil {
settingsValue = "1"
}
if (settingsValue?.isEqual("1"))! {
//Do something
} else {
//Do something
}
Пока пользователь не откроет настройки приложения в первый раз, система вернет ноль. И в моем случае приложение вылетает.