从Objective-C访问Swift代表的正确方式是什么?
环境:Xcode 6.1.1和Xcode 6.2测试版 问候语:从Objective-C访问Swift代表的正确方式是什么?,objective-c,swift,delegation,Objective C,Swift,Delegation,环境:Xcode 6.1.1和Xcode 6.2测试版 问候语: 我需要从同一项目中相邻的Objective-C文档发布Swift文档中的NSString。例如,在Swift页面上显示Objective-C中生成的“Hello World”我做了一个概念验证演示;基于反馈。 我正在考虑通过协议模式使用ObjC-->Swift委托,如下所示: 注意:Swift文件是代表。 在这里,我从Objective-C调用Swift中的委托方法: #pragma mark - Action metho
我需要从同一项目中相邻的Objective-C文档发布Swift文档中的NSString。例如,在Swift页面上显示Objective-C中生成的“Hello World”
我做了一个概念验证演示;基于反馈。 我正在考虑通过协议模式使用ObjC-->Swift委托,如下所示: 注意:Swift文件是代表。 在这里,我从Objective-C调用Swift中的委托方法:
#pragma mark - Action methods
- (IBAction)sendDelegateAction:(UIButton *)sender {
[_delegate radiusString:@"Hello World"];
}
我实例化了Objective-C文件,以将委托链接到实例(我希望我没有弄错):
到目前为止,编译器抱怨找不到Swift协议。
以下是协议(以Swift声明): 下面是Objective-C头文件中对该协议的代理引用:
@interface MyObjCTableViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, weak) id<DiscoveryContributeProtocol> delegate;
@end
@接口MyObjectableViewController:UIViewController
@属性(非原子,弱)id委托;
@结束
但是,编译器找不到协议:
顺便说一句:当我把桥引用放在ObjC的头文件中时,我得到一个编译器错误:
两个问题:
您的想法是正确的,但是有一些bug阻止了它的工作
geo32bounders
符合DiscoveryContributeProtocol
,但它不需要也不实际实现它,它只有一个符合该协议的属性。这就是“Method”radiusString:“not implemented”错误的来源:
DiscoveryContributeDelegate
——我们通常不会在协议名称中使用“protocol”可以我制作了一个概念验证/演示应用程序。与您建议的修订(请参阅上面重新编写的问题)。我接近了吗?@FrederickC.Lee第1项不正确,桥接头导入需要在obj-c头文件中,而不是在实现文件中。这就是为什么在接口中会出现“找不到协议声明”的原因。就我个人而言,我会将桥接头导入到您的
*\u prefix.h
文件中,然后您就会知道它无处不在。我已将桥接头添加到ObjC的头文件中。但是编译器找不到它。请参见上面添加的要查询的材料。
@objc protocol DiscoveryContributeProtocol {
// optional
func radiusString(radiusString:String)
}
@interface MyObjCTableViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, weak) id<DiscoveryContributeProtocol> delegate;
@end
@interface Geo32Boundaries: UIViewController // <-- that's all you need
geo32Controller.delegate = self