使用从Swift到Objective-C的superview获取UITableViewCell

时间:2017-02-22 08:19:33

标签: ios objective-c swift uitableview xcode8

我将Objective-C项目迁移到Swift 3.我有一点问题。如何从Objective-C代码调用此Swift函数?
P.S:我已经导入" project_name-Swift.h"在我的.m文件中。 我的Swift代码:

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
        }

我的目标c代码:

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

它显示了此行中目标c代码中的ARC语义问题错误&#34; phoneButton findSuperViewWithClass&#34;像这样 - &gt; UIButton没有可见的@interface声明选择器&quot; findSuperViewWithClass&#39;

1 个答案:

答案 0 :(得分:0)

使用仿制药可能会使你的Swift-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`.
            /* ... */
        }

    /* ... */
}