2017-02-22 5 views
0

私はObjective-CプロジェクトをSwift 3に移行していますが、少し問題があります。 Objective-CコードからこのSwift関数をどのように呼び出すことができますか?
P.S:.mファイルに「project_name-Swift.h」をインポートしました。 マイスウィフトコード:SwiftからObjective-CへのスーパービューでUITableViewCellを取得

func findSuperViewWithClass<T>(superViewClass : T.Type) -> UIView? { 

      var xsuperView : UIView! = self.superview! 
      var foundSuperView : UIView! 

      while (xsuperView != nil && foundSuperView == nil) { 

       if xsuperView.self is T { 
        foundSuperView = xsuperView 
       } else { 
        xsuperView = xsuperView.superview 
       } 
      } 
      return foundSuperView 
     } 

私のObjective Cのコード:

UIButton * phoneButton = (UIButton *) sender; 
    UITableViewCell *cell = (UITableViewCell*) [phoneButton findSuperViewWithClass:[UITableViewCell class]]; 

、それはこの行このような "phoneButton findSuperViewWithClass" でObjective CのコードでARCセマンティック問題のエラーを示して - >目に見える@interface UIButtonはセレクタ 'findSuperViewWithClass'を宣言します

答えて

0

ジェネリックスの使用は、あなたのSwift-to-Objective-Cブリッジングを煩雑にしている可能性があります。
Objective-Cにブリッジするときに、パラメータがメソッド名の一部であることにも注意してください。
は、ジェネリックを避けるために、よりスウィフトのような署名を持っている(とあなたのObjective-Cのコードを変更しないよう)するためにあなたのスウィフト機能をリファクタリングしてみてください。

func findSuperView(class: AnyClass) -> UIView? { 

    /* ... */ 

     if xsuperView.isKind(of: `class`) { // you can use a reserved keyword as a parameter name as long as you refer to it using `backticks`. 
      /* ... */ 
     } 

    /* ... */ 
} 
+0

感謝を。私のために働いた。いいぞ。 –

関連する問題