如何在swift中使用带有performSelector的默认协议实现?

时间:2015-10-13 23:51:55

标签: xcode swift protocols default implementation

我通过创建该协议的扩展,使用单个方法和默认实现创建了一个协议。我的应用程序崩溃,因为执行选择器无法识别默认实现。

实际上可以直接调用该方法,没有任何问题。对方法使用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.
  }
}

1 个答案:

答案 0 :(得分:2)

解决方法是定义一些其他方法并将其调用为默认方法。