2016-07-21 9 views
5

カスタムUIViewの1つを拡張してメソッドを呼び出そうとしていますが、 "値の型 '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を終了して再起動しましたが、まだコンパイルされません。それは既存のアーキテクチャーと何かでなければなりません。 – Amloelxer

+0

拡張機能を別のファイルからMyCustomViewと同じクラスに移動することで、この問題は解決しますが、アーキテクチャ的には好きなことではなく、残念ながら私がなぜ最初にコンパイルされないのかという質問には答えません。 – Amloelxer

答えて

0

これは、UIViewがObjective-Cクラスであり、メソッドのディスパッチが純粋なSwiftクラスとわずかに異なるという事実と関係している可能性があります。

Obj-Cのメソッドディスパッチメカニズムを満たすには、dynamicディレクティブで拡張のメソッドを宣言する必要があります。

(私はそれはあなたを気にしようとしていない)

0

私は考えることができる唯一の答えは、あなたの拡張子のファイルには、コンパイルされているターゲットのメンバーではないということです。拡張子を持つファイルを選択し、ファイルインスペクタでTarget Membershipを確認し、ターゲットがチェックされていることを確認します。ファイルがプロジェクトフォルダ内にない場合は、移動してターゲットメンバーシップセクションを表示する必要があります。

関連する問題