Dru*_*rux 7 lazy-evaluation swift swift3
以下初始化当前在调用的行中产生此错误getEventCalendar:
不能在属性初始值设定项中使用实例成员'getEventCalendar'; 属性初始化程序在'self'可用之前运行.
是否有初始化任何适当的方式lazy与依赖于其他对象类型的值实例变量instance variables的self(不只是self 单纯)?我已经尝试过从getEventCalendar一个方法转变为一个函数,但这也无济于事.
class AbstractEventCalendarClient {
let eventStore: EKEventStore
let entityType: EKEntityType
lazy var eventCalendar = getEventCalendar()
init(eventStore: EKEventStore, entityType: EKEntityType) {
self.eventStore = eventStore
self.entityType = entityType
}
func getEventCalendar() -> EKCalendar? {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用仅执行一次的闭包,该闭包捕获的属性self并在执行时使用它们(=第一次使用lazy属性)。例如
class Foo {
var foo: Int
var bar: Int
lazy var lazyFoobarSum: Int = { return self.foo + self.bar }()
init(foo: Int, bar: Int) {
self.foo = foo
self.bar = bar
}
}
let foo = Foo(foo: 2, bar: 3)
foo.foo = 7
print(foo.lazyFoobarSum) // 10
Run Code Online (Sandbox Code Playgroud)
自行尝试:您可以以同样的方式self在此仅执行一次的闭包中使用帮助(实例)功能。
class Foo {
var foo: Int
var bar: Int
lazy var lazyFoobarSum: Int = { return self.getFooBarSum() }()
init(foo: Int, bar: Int) {
self.foo = foo
self.bar = bar
}
func getFooBarSum() -> Int { return foo + bar }
}
let foo = Foo(foo: 2, bar: 3)
foo.foo = 7
print(foo.lazyFoobarSum) // 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1897 次 |
| 最近记录: |