协议的约束使代码执行崩溃

时间:2018-04-09 21:48:28

标签: swift

我收到了这段代码:

import UIKit

protocol Test where Self: UIView {
    func printAnything()
}

class MyView: UIView, Test {
    func printAnything() {
        print("Anything")
    }
}

let myView: Test = MyView()
myView.printAnything()

约束是:where Self: UIView

将它粘贴到游乐场时,它会在运行时因此错误而崩溃:

  

错误:执行被中断,原因:EXC_BAD_ACCESS(代码= 1,   地址=为0x0)。

删除约束,确实会删除运行时错误并打印“Anything”。为什么添加的约束会在运行时崩溃?

运行XCode 9.3 Swift 4.1

1 个答案:

答案 0 :(得分:3)

为了将此约束为Objective-C类型,协议必须为@objc

@objc protocol Test where Self: UIView {
    func printAnything()
}

这是一个已知的缺陷:SR-7068