加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 使用依赖于其他实例变量的值初始化惰性实例变量

发布时间:2020-12-14 05:46:53 所属栏目:百科 来源:网络整理
导读:以下初始化当前在调用getEventCalendar的行中生成此错误: Cannot use instance member ‘getEventCalendar’ within property initializer; property initializers run before ‘self’ is available. 是否有任何合适的方法来初始化惰性实例变量的值取决于s
以下初始化当前在调用getEventCalendar的行中生成此错误:

Cannot use instance member ‘getEventCalendar’ within property
initializer; property initializers run before ‘self’ is available.

是否有任何合适的方法来初始化惰性实例变量的值取决于self的其他对象类型实例变量(不仅仅是自我alone)?我已经例如尝试将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? {
    // ...
  }
}
你可以使用一次只执行的闭包来捕获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

W.r.t.对于你自己的尝试:你可以以同样的方式在这个曾经执行过的闭包中使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读