我正在创建一个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
的调用,这将对我当前的项目有效,但如果我尝试将OperationGroup
与依赖项结合使用,则将来可能会中断。这是不是编译器的一个错误,因为编译器不应该让我调用
super.ready
,或者它应该实际工作,或者我做错了什么?FWIW,如果我将
state == .Ready && super.ready
改为super.ready
它也会编译和链接,但这可能只是编译器优化了整个过程。 最佳答案
奇怪的是,如果您将顺序从以下更改为:
return state == .Ready && super.ready
致:
return super.ready && state == .Ready
或者,如果订单真的让你烦恼,你可以:
if state != .Ready {
return false
}
return super.ready
不管怎样,在我看来,这是一个编译器错误,值得一个错误报告。