2017-02-22 7 views
0

Я переношу свой проект Objective-C в Swift 3. и у меня есть небольшая проблема. Как я могу назвать эту функцию Swift из кода Objective-C?
P.S: Я уже импортировал «project_name-Swift.h» в свой файл .m. Мой Swift код:Получение UITableViewCell с супервизом от Swift до Objective-C

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 
     } 

Моя цель с код:

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

и показывает ARC семантическая ошибка Выпуск в Objective C кода в этой строке "phoneButton findSuperViewWithClass", как это -> Нет видимых @interface для UIButton объявляет селектор «findSuperViewWithClass»

ответ

0

Вероятно, использование дженериков - это то, что делает ваш переход с Swift-to-Objective-C затруднительным.
Также обратите внимание, что параметры являются частью имени метода при соединении с объектом Objective-C.
Попробуйте рефакторинг вашего Swift функции, чтобы избежать дженерик и иметь более Swift подобную подпись (и избежать изменений кода 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

Спасибо. Работал для меня. Пальцы вверх. –

Смежные вопросы