我使用协议调用func,然后崩溃。我知道如何解决该问题,但我想确切知道为什么它不起作用,以及为什么它可以起作用。我认为问题可能出在方法混乱问题上。
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()
}
或者如果扩展中的类继承协议,它也可以修复崩溃。
class JKD : UIView{}
extension JKD : Testable{
func update() {
print("JKD")
}
}
所以,在这种情况下,我想知道为什么只有第一种方法会崩溃。