我试着在协议扩展中加入“self”。它在实际设备上运行时由于EXC_BAD_ACCESS错误而崩溃,但在模拟器上运行良好。我该怎么做才能成功?谢谢
我的全部代码:

protocol SomeProtocol: class {

}

protocol DataSetEditable {
    func add(_ data: Data)
}

extension DataSetEditable where Self: SomeClass {
    func add(_ data: Data) {
        print(data)
        if let someProtocol = self as? SomeProtocol {
            print(someProtocol)
            //do some extra works
        }
    }
}

class SomeClass: UIView {

}

class MyClass: SomeClass, DataSetEditable, SomeProtocol {
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let myClass = MyClass()
        myClass.add(Data())
    }
}

最佳答案

首先,这可能是一个快速的错误,因为如果编译器不能处理这个问题,它应该提供一个错误。你应该在bugs.swift.com打开它。这感觉与SR-544有关。
也就是说,作为一个规则,将ObjC类型符合Swift-only协议是非常棘手的。有时有效,有时无效。这是一个相当复杂的一致性,显然它并不总是有效的。解决方案是通过添加@objc,将协议公开给ObjC:

@objc protocol SomeProtocol: class {}

关于swift - 协议(protocol)扩展中的“自我为?”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49854220/

10-11 05:23