在课堂上,我有以下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_sync
,init
函数无法在不使变量_state
未初始化的情况下返回。
那么,我怎样才能以有效的方式解决问题呢?
答案 0 :(得分:1)
如果可以的话,一种选择是将_state声明为可选。(如果这样做没有坏处)
var _state:State?
如果您选择此选项,则可以在dispatch_sync
中使用它。