我正在创建一个 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
无论如何,对我来说它看起来像是一个编译器错误,值得提交错误报告。
关于swift - 从属性覆盖调用 super 时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430102/