Префикс подстрочного символа Swift Instance Variable?

Вырезал ли Swift выражение подчеркивания-префикса для переменных экземпляра, например, _window? Если да, то почему?

Ответ 1

В Objective-C, когда вы объявляете свойство @synthesize, вы автоматически создадите геттер и сеттеры автоматически с clang 3.2. Таким образом, по умолчанию @synthesize для свойства "foo" будет выглядеть так:

@synthesize foo = _foo

из-за этого _foo тогда будет iVar. Другими словами, вы могли бы сделать @synthesize себя и назвали iVar, что вам понравилось:

@synthesize foo = myiVarFoo

поэтому в этом случае нет "_"

Итак, теперь в Swift из документация:

Swift объединяет эти понятия в одно объявление свойства. Свойство Swift не имеет соответствующей переменной экземпляра, и к хранилищу резервных копий для свойства напрямую не обращаются.

Итак, из документации ясно, что swift не имеет соответствующей переменной экземпляра, поэтому больше не нужно иметь "_".

Ответ 2

Apple по-прежнему использует _ в своем шаблоне кода Xcode в качестве условного обозначения для переменной non-public. Вы увидите такой шаблон:

class Foo {
  var _bar : Bar? = nil
  var  bar : Bar {
    if _bar == nil {
      /* compute some stuff */
      _bar = Bar (/* ... */)
    }
    return _bar!
  }
}

где доступ к свойству должен выполняться через вычисляемое свойство bar. Вы найдете это в шаблонах Apple CoreData.

Ответ 3

Префикс подчеркивания подразумевал не путать переменную экземпляра _foo с ее getter foo.

В скором времени не существует такого различия между иварами и геттерами. Вместо этого у вас есть только свойства, что делает соглашение _ не необходимым.

Ответ 4

Ответ отрицательный, потому что в Swift нет "переменных экземпляра". Только свойства (хранимые свойства и вычисленные свойства).

Ответ 5

Я бы сказал, что это соглашение _underscoreName отбрасывается (хотя некоторые шаблоны Apple все еще имеют его).

Swift "Lazy Stored Properties" делает ненужным. Это сообщение:

http://mikebuss.com/2014/06/22/lazy-initialization-swift/

это хорошо объясняет.