我将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;
答案 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`.
/* ... */
}
/* ... */
}