Вырезал ли Swift выражение подчеркивания-префикса для переменных экземпляра, например, _window? Если да, то почему?
Префикс подстрочного символа Swift Instance Variable?
Ответ 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/
это хорошо объясняет.