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
}