2016-07-21 88 views
5

我想通过扩展我的自定义UIViews之一来调用方法,但我得到错误“类型'MyCustomView'的值没有成员'testMethod'”。下面是我的代码无法从UIView扩展调用方法

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() 
    } 
    } 
} 

很显然,我可以实现这个功能了一堆不同的方式,但我更感兴趣的是,为什么这个特别的代码将无法编译,因为它似乎在逻辑上正确的给我。所有的帮助非常感谢。

+0

你的代码除了缺少''' – dan

+0

以外,我编译好了修复了大括号谢谢。这真是太奇怪了。我尝试删除派生的数据,并退出Xcode并重新启动,但它仍然不会编译。它必须是现有架构的东西,然后右@dan? – Amloelxer

+0

将扩展从它自己的单独文件移动到与MyCustomView相同的类可解决此问题,但这不是我希望在架构上执行的操作,但不幸的是,仍然不能回答我为什么不会首先编译的问题。 – Amloelxer

回答

0

这可能与UIView是一个Objective-C类并且方法调度与纯Swift类略有不同有关。

您可能需要使用动态指令声明扩展的方法,以满足Obj-C的方法调度机制。

(我还没有尝试过介意你)

0

我能想到的唯一答案是,你的扩展文件是不是你正在编译目标的成员。选择具有扩展名代码的文件,并查看文件检查器中的Target Membership,确保您的目标已被选中。如果该文件不在项目文件夹内,则可能需要将其移动到该目标成员部分。