Ios 调用协议方法会导致崩溃
我使用协议调用func,然后发生崩溃。我知道如何解决这个问题,但我想确切地知道,为什么它不能工作,为什么它可以工作。我认为问题可能是方法问题Ios 调用协议方法会导致崩溃,ios,swift4,Ios,Swift4,我使用协议调用func,然后发生崩溃。我知道如何解决这个问题,但我想确切地知道,为什么它不能工作,为什么它可以工作。我认为问题可能是方法问题 protocol Testable where Self : UIView{ func update() } class JKD : UIView,Testable{ func update() { print("JKD") } } func test(a : Testable){ a.update()
protocol Testable where Self : UIView{
func update()
}
class JKD : UIView,Testable{
func update() {
print("JKD")
}
}
func test(a : Testable){
a.update()
}
let j2 : JKD = JKD.init(frame: CGRect.zero)
test(a: j2) // it will crash
这次崩溃有很多办法可以解决,比如:
@objc protocol Testable where Self : UIView{
func update()
}
或者这个:
protocol Testable{
func update()
}
如果func使用Generic,它也可以修复崩溃
func test<T : Testable>(a : T) {
a.update()
}
所以,在这种情况下,我想知道为什么只有第一条路会崩溃。来自Swift 5版本
协议现在可以将其一致性类型约束为
为给定类创建子类。支持两种等效形式:
protocol MyView: UIView { /*...*/ }
protocol MyView where Self: UIView { /*...*/ }
Swift 4.2接受了第二种形式,但并未完全实施
有时可能在编译时或运行时崩溃。()
(38077232)
似乎他们已经解决了Swift 5中存在的问题。它在Xcode 10.2 beta 4上运行良好
protocol MyView: UIView { /*...*/ }
protocol MyView where Self: UIView { /*...*/ }