无法从UIView扩展中调用方法

时间:2016-07-21 18:04:32

标签: ios swift uiview swift-extensions

我正在尝试通过扩展我的一个自定义UIViews来调用方法,但是我得到错误“类型'MyCustomView'的值没有成员'testMethod'”。以下是我的代码

extension MyCustomView {
  func testMethod() {
    //do stuff here
  }
}

//in a separate class from the extension 
class func onMoreOptionsButtonPressed(currentViewController:UIViewController) {
  for view in currentViewController.view.subviews {
    if view.isKindOfClass(MyCustomView) {
      let myCustomView = view as! MyCustomView
      myCustomView.testMethod()
    }
  }
}

显然我可以通过一系列不同的方式实现这个功能,但是我更感兴趣的是为什么这个代码不能编译,因为它在逻辑上对我来说是正确的。非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

这可能与UIView是Objective-C类和方法调度与纯Swift类略有不同这一事实有关。

您可能必须使用dynamic指令声明扩展的方法,以满足Obj-C的方法调度机制。

(我没想过你)

答案 1 :(得分:0)

我能想到的唯一答案是你的扩展文件不是你正在编译的目标的成员。选择具有扩展代码的文件,然后在文件检查器中查看目标成员身份,确保选中目标。如果文件不在项目文件夹中,您可能必须将其移动到那里才能看到目标成员资格部分。