以下初始化当前在调用的行中产生此错误getEventCalendar:
getEventCalendar
无法在属性初始化程序中使用实例成员’getEventCalendar’;属性初始化程序在“自我”可用之前运行。
是否有初始化任何适当的方式lazy与依赖于其他对象类型的值实例变量instance variables的self(不只是self单纯?我已经尝试过将getEventCalendar方法从一种方法转换为一种功能,但这也无济于事。
lazy
instance variables
self
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? { // ... } }
您可以使用仅执行一次的闭包,该闭包捕获的属性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
自行尝试:您可以以同样的方式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