Open sharephoenix opened 4 years ago
代码
protocol TestProtocol: NSObject { func printGg() } extension TestProtocol where Self: UIView { func printGg() { print("这里是默认方法") } } extension UIView: TestProtocol { } class Test: UIView { func printGg() { print("这里是 Test 方法") } } let t = Test() t.printGg() var array: [UIView & TestProtocol] = [] array.append(t) if let v = array.first { v.printGg() } array.first?.printGg()
打印结果:
这里是 Test 方法 这里是默认方法 这里是默认方法
问题: 问什么从数组中取出来后调用方法打印结果变了呢?
extension UIView: TestProtocol {} UIView 实现了 TestProtocol 协议,而 Test 没有直接实现协议方法。所以打印 这里是默认方法; 好像没有说清楚,后面研究下,在继续回答吧
extension UIView: TestProtocol {}
TestProtocol
Test
代码
打印结果:
问题: 问什么从数组中取出来后调用方法打印结果变了呢?