swift - 从属性覆盖调用 super 时出现链接错误

标签 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 的调用,这对我当前的项目有效,但如果我尝试使用,将来可能会中断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/

相关文章:

swift 。在内部协议(protocol)中声明私有(private)函数

swift - 如何使用 Swift 和 SpriteKit 创建类似吉他的弦乐

objective-c - 复制 Realm 对象而不添加到数据库

swift - 自动布局中心 UIView 在其中心的另一个 UIView 之上

swift - 无法将数据添加到 firebase

ios - 如何在 swift 中有效地使用处理程序?

ios - 带字典的 Swift 4 Codable 数组具有 String 和 Array 的值

ios - 如何添加不可移动的 UITableViewCells

ios - 在 UIWebView 中获取页面标题?

ios - 使用 Swift 2 的 HJImagesToVideo