Null/nil по быстрому языку
Как бы мы определили следующее в быстром языке программирования:
- null
- ноль
- Nil
- [NSNull null]
Другими словами, каков был бы быстрый эквивалент каждого из этих объективных c-терминов.
Кроме того, хотелось бы также знать, существуют ли какие-либо конкретные варианты использования для нецелевых типов c, таких как структуры и перечисления. Заранее спасибо.
Ответы
Ответ 1
Относительно эквивалентов:
-
NULL
не имеет эквивалента в Swift.
-
nil
также называется nil
в Swift
-
nil
не имеет эквивалента в Swift
-
[NSNull null]
можно получить в Swift как NSNull()
Примечание. Это мои догадки, основанные на чтении и игре. Исправления приветствуются.
Но обработка nil/NULL в Swift очень отличается от Objective C. Она выглядит направленной на обеспечение безопасности и заботы. Ознакомьтесь с опциями в руководстве. Вообще говоря, переменная не может быть NULL вообще, и когда вам нужно представить "отсутствие значения", вы делаете это декларативно.
Ответ 2
Если вам нужно использовать NULL для операций указателя низкого уровня, используйте следующее:
UnsafePointer<Int8>.null()
Ответ 3
nil
означает "нет значения", но совершенно различен в любом другом смысле от Objective-C nil
.
Он присваивается только дополнительным переменным. Он работает как с литералами, так и с структурами (т.е. Работает с элементами на основе стека, а не только с кучными элементами).
Необязательные переменные не могут быть назначены nil
, даже если они являются классами (т.е. они живут в куче).
Поэтому он явно не является указателем NULL
и не похож на один. Он разделяет это имя, потому что он предназначен для использования по той же семантической причине.
Ответ 4
Концепция Null in Swift возобновляется до необязательного перечисления. Перечисление определяется следующим образом:
enum Optional<T> {
case Some(T)
case None
}
Это означает, что вы не можете иметь неинициализированную переменную/константу в Swift. Если вы попытаетесь это сделать, вы получите сообщение об ошибке компилятора, указывающее, что переменная/константа не может быть неинициализирована. Вам нужно будет обернуть его в необязательное перечисление..
Это единственная концепция Null, которую вы найдете в Swift
Ответ 5
Swifts nil
не совпадает с nil
в Objective-C.
В Objective-C, nil
является указателем на несуществующий объект. В Swift nil
не является указателем - это отсутствие значения определенного типа. Опция любого типа может быть установлена на nil
, а не только на типы объектов.
NULL
не имеет эквивалента в Swift.
nil
также называется nil в Swift
nil
не имеет эквивалента в Swift
[NSNull null]
можно получить в Swift как NSNull()
Ответ 6
У меня была эта проблема в проблемном сценарии: Пакет настроек
Чтобы кто-то не тратил впустую свое время (как я его потерял!)
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
}
Пока пользователь не откроет настройки приложения в первый раз, система вернет нуль. И в моем случае приложение аварийно завершает работу.
Ответ 7
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}