Вы получите эту ошибку, если ваш класс удовлетворяет этим условиям.
- Подкласс от
NSObject.
- Есть
static letполе.
- Получает доступ к полю из метода экземпляра через
dynamicType.
Я не знаю, почему это происходит, но вы можете попробовать этот обходной путь.
static var value: Int {
get {
return 111
}
}
Или в более короткой форме.
static var value: Int {
return 111
}
Используйте static var { get }вместо static let.
Хотя средство получения свойства и стоимость его вызова с большой вероятностью будут исключены оптимизатором LLVM в приведенном выше примере, вы можете явно избежать этого.
Если вас беспокоит такая стоимость расчета стоимости, вы можете создать ее один раз и кэшировать вот так.
static var value: Int {
return cache
}
private let cache = getTheNumber()
Или вот так, если вы хотите полностью скрыть существование кеша.
static var value: Int {
struct Local {
static let cache = getTheNumber()
}
return Local.cache
}
func test2Декларации не требуется , чтобы вызвать ошибку, так как из Xcode 7.3.1.