2016-07-21 89 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,確保您的目標已被選中。如果該文件不在項目文件夾內,則可能需要將其移動到該目標成員部分。