Swift: декларация "var" без метода getter/setter не допускается здесь
Я попытался объявить свойство IBOutlet
для расширения класса. Но он дает ошибку как
Объявление 'var' без метода getter/setter не разрешено здесь
class ExampleView : UIView
{
}
extension ExampleView
{
@IBOutlet var btn1, btn2 : UIButton // here I got error.
}
Пожалуйста, предложите мне правильный способ сделать это?
Ответы
Ответ 1
От Extensions
→ Computed Properties
в The Swift Programming Language
Примечание
Расширения могут добавлять новые вычисленные свойства, но они не могут добавлять сохраненные свойства или добавить наблюдателей свойств к существующим свойствам.
Дополнение в ответ на комментарий twlkyao: Вот моя реализация свойства absoluteValue
для Double
extension Double {
var absoluteValue: Double {
if self >= 0 {
return self
} else {
return -self
}
}
}
// Simple test -> BOTH println() should get called.
var a = -10.0
if (a < 0) {
println("Smaller than Zero")
}
if (a.absoluteValue > 5) {
println("Absolute is > 5")
}
Ответ 2
От Язык быстрого программирования:
Расширения в Swift могут:
- Добавить вычисленные свойства и вычисленные статические свойства
- Определить методы экземпляра и методы типа
- Предоставить новые инициализаторы
- Определить индексы
- Определить и использовать новые вложенные типы
Это означает, что вы не можете добавлять IBOutlets и другие сохраненные свойства.
Если вы действительно хотите обмануть, вы можете создать глобальные vars или объект бухгалтерского учета, который позволит вам запрашивать эти vars или объект, чтобы добавить эти свойства (и заставить их быть вычисленными свойствами).
Но похоже, что это противоречит лучшим практикам. Я бы сделал это, только если нет другого пути.