сеттеров.
Допустим есть структура A, пустая, вот так:
struct A {
}
Доступа у меня к ней нет, а я хочу добавить в неё переменную через расширение, вот так:
extension A {
var a: Int {
get {
return 1
}
set {
self.a = newValue // WARNING: function call causes an infinite recursion
}
}
}
IDE меня уже предупреждает о бесконечной рекурсии, которая и происходит, если я попытаюсь изменить "a". Вот так:
var aaa = A()
aaa.a = 2
Как это поправить?
https://stackoverflow.com/questions/25426780/how-to-have-stored-properties-in-swift-the-same-way-i-had-on-objective-c смотрел сюда? производительность чуток уйдет, но ты получишь что хотел
Не получит. Это всё основано на ObjC-рантайм. Это ObjC-хаки, переписанные на свифте. Соответственно, это работает там, где есть ObjC-рантайм — т.е. на платформах Apple. В чистом свифте так не выйдет. И это сделано специально создателями свифта.
Кто знает для чего он это использует
Начиная с Свифта 4, там от ОБЖ-с ничего. Просто две переменных
Как называется наш чат? :)
Кажется, там лишь создаётся иллюзия, а по факту все будут юзать одну переменную
Не смотря на это, сюда заплетают из разных областей, так как тут собраны шарящие люди именно по свифту
Статических! И даже есть решения с отделением пропертей одного инстанса от пропертей с тем же именем другого инстанса. Ну что сказать — чего только люди не придумают, лишь бы не следовать идеологии языка. И работать это будет весьма ограниченно, т.е. все-равно это "недопеременные". Не стал бы даже смотреть в эту сторону, пусть люди развлекаются как хотят, огребать последствия придется тоже им.
Да можно, только это не бест практис
Видел, но не понял.
Обсуждают сегодня