我正在创建NSOperation
子类并使用以下代码片段来管理状态ready
(以及executing
和finished
)属性:
public class OperationGroup : NSOperation {
enum ExecutionState {
case Ready
case Executing
case Finished
}
var state:ExecutionState
override public var ready:Bool {
return state == .Ready && super.ready
}
override init() {
state = .Ready
}
}
当通过REPL或作为应用程序的一部分进行链接时,我收到错误:
Global is external, but doesn't have external or weak linkage!
i8* ()* @_TFFC13__lldb_expr_114OperationGroupg5readySbaL_4selfS0_
invalid linkage type for function declaration
i8* ()* @_TFFC13__lldb_expr_114OperationGroupg5readySbaL_4selfS0_
我到目前为止找到的唯一方法是省略对super.ready
的调用,这对我当前的项目有效,但如果我尝试使用{{ 1}}与依赖关系一起。
这是一个编译器错误,编译器不应该让我调用OperationGroup
或它应该实际工作,还是我做错了什么?
FWIW,如果我将super.ready
更改为state == .Ready && super.ready
,它也会编译和链接,但这可能只是编译器优化整个事情。
答案 0 :(得分:1)
奇怪的是,如果您从以下地址更改订单,它就会起作用:
return state == .Ready && super.ready
为:
return super.ready && state == .Ready
或者,如果订单真的困扰你,你可以:
if state != .Ready {
return false
}
return super.ready
无论如何,它看起来像是一个编译器错误,值得一个错误报告。