与init()和dispatch_sync的难题

时间:2014-07-21 20:43:22

标签: initialization swift grand-central-dispatch

在课堂上,我有以下init()功能:

init() {
    let q = 0
    dispatch_sync(queue) {
        self._state = State(q)
    }
}

其中_state是结构State的实例,queue是全局调度队列。

我正在使用dispatch_sync调用来同步可能同时访问的类的实例。

我正在运行一些奇怪的问题,编译器抱怨在初始化之前使用_state变量(即在块中使用它,在它被初始化之前):

main.swift:363:37: error: variable 'self._state' used before being initialized
    dispatch_sync(s_sync_queue) {
                                ^

但是,使用调度队列和块的唯一目的是初始化ivar。

编译器甚至声明,代码将返回而不初始化变量_state

main.swift:372:5: error: property 'self._state' not initialized
}
^

虽然很明显,由于dispatch_syncinit函数无法在不使变量_state未初始化的情况下返回。

那么,我怎样才能以有效的方式解决问题呢?

1 个答案:

答案 0 :(得分:1)

如果可以的话,一种选择是将_state声明为可选。(如果这样做没有坏处)

  var _state:State?

如果您选择此选项,则可以在dispatch_sync中使用它。