从属性覆盖调用super时的链接错误

时间:2014-08-21 15:21:08

标签: swift

我正在创建NSOperation子类并使用以下代码片段来管理状态ready(以及executingfinished)属性:

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,它也会编译和链接,但这可能只是编译器优化整个事情。

1 个答案:

答案 0 :(得分:1)

奇怪的是,如果您从以下地址更改订单,它就会起作用:

return state == .Ready && super.ready

为:

return super.ready && state == .Ready

或者,如果订单真的困扰你,你可以:

if state != .Ready {
    return false
}
return super.ready

无论如何,它看起来像是一个编译器错误,值得一个错误报告。