尝试使用Swift中用Objective-C编写的委托方法是“抛出”;找不到协议声明“;

尝试使用Swift中用Objective-C编写的委托方法是“抛出”;找不到协议声明“;,swift,Swift,我有一个使用Salesforce SDK的Objective-C示例应用程序。我正在尝试将它转换为使用Swift一次一个类。Salesforce SDK有一个名为“SFRestRequest.h”的类,该类具有“SFRestDelegate”委托 在Objective C中,我有一个名为“RootViewController.h”的类,它是UITableViewController的子类。它实现了SFRestDelegate。它很好用 //RootViewController.h #import

我有一个使用Salesforce SDK的Objective-C示例应用程序。我正在尝试将它转换为使用Swift一次一个类。Salesforce SDK有一个名为“SFRestRequest.h”的类,该类具有“SFRestDelegate”委托

在Objective C中,我有一个名为“RootViewController.h”的类,它是UITableViewController的子类。它实现了SFRestDelegate。它很好用

//RootViewController.h
#import <UIKit/UIKit.h>
#import "SFRestAPI.h"

@interface RootViewController : UITableViewController <SFRestDelegate> {

    NSMutableArray *dataRows;
    IBOutlet UITableView *tableView;    

}
我的RooVC.Swift文件如下所示:

import UIKit

class RootVC: UITableViewController,SFRestDelegate {
 ..
..
}
现在,如果我命令并单击SFRestDelegate,它将正确地转到协议实现。 然而,如果我尝试构建,我会得到。。“找不到协议声明SFRestDelegate错误”

SWIFT_CLASS("_TtC10SwiftForce6RootVC")
@interface RootVC : UITableViewController <SFRestDelegate>
@property (nonatomic) NSArray * dataRows;
- (instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
- (void)viewDidLoad;
- (void)didReceiveMemoryWarning;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
@end
SWIFT\u类(“TtC10SwiftForce6RootVC”)
@接口RootVC:UITableViewController
@属性(非原子)NSArray*数据行;
-(instancetype)initWithStyle:(UITableViewStyle)样式OBJC\u指定的\u初始值设定项;
-(void)视图加载;
-(无效)未收到记忆警告;
-(NSInteger)表格视图中的节数:(UITableView*)表格视图;
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节;
@结束
感谢您的帮助。您可以从以下位置下载应用程序进行测试:

我刚刚向您链接的回购协议发送了一个请求,解决了问题

您的问题似乎是Swift和Objective-C类和标头的加载顺序有问题。您必须确保在编译Swift代码之前编译Swift类所需的任何标头。这可以通过简单的.h和.m Objective-C文件无缝处理,但在使用静态库时除外(就像在您的项目中一样,.pch文件似乎是导入Swift代码在编译时需要的任何头文件的最合适的位置

将这一行添加到SwiftForce-Prefix.pch文件似乎有效:

#导入


这看起来不是很优雅(就像桥接头解决方案一样)然而,只有时间才能证明这是错误还是最佳实践。

MytDelegate是一个拼写错误吗?不是。我写这篇文章时,这只是一个拼写错误。不知羞耻的插件,如果这个答案对你有用:来加入冒险/对话,与我和我的一些学生一起学习swift:谢谢jonnyclem的解决方案。它看起来像是br中的一个错误将标题作为桥接标题对我来说应该是我所理解的。至少我没有找到任何关于将其添加到prefix.pch文件的内容。再次感谢!顺便说一句,你的博客真的很酷!谢谢,这对我很有用!对于像我这样在项目中没有前缀文件的人,请注意:你可以自己创建一个并在target中指定它设置,生成设置,
前缀头
。这感觉太糟糕了。这不正是桥接头应该处理的吗?你的回答为我解决了这个问题。
SWIFT_CLASS("_TtC10SwiftForce6RootVC")
@interface RootVC : UITableViewController <SFRestDelegate>
@property (nonatomic) NSArray * dataRows;
- (instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
- (void)viewDidLoad;
- (void)didReceiveMemoryWarning;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
@end