我通过创建该协议的扩展,使用单个方法和默认实现创建了一个协议。我的应用程序崩溃,因为执行选择器无法识别默认实现。
实际上可以直接调用该方法,没有任何问题。对方法使用respondsToSelector返回false,并为方法崩溃执行performSelector。
在实际的类中或在类的扩展中实现协议使其工作,但这违背了默认实现的目的。
我还向苹果提交了一份错误报告。
public protocol TestProtocol
{
func testMethod()
}
extension TestProtocol
{
public func testMethod() {
print("testing the method...")
}
}
class ViewController: UIViewController, TestProtocol {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.button.addTarget(self, action: "testMethod", forControlEvents: UIControlEvents.TouchUpInside)
print(self.respondsToSelector("testMethod"))
self.testMethod()
// self.performSelector("testMethod")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:2)
解决方法是定义一些其他方法并将其调用为默认方法。