试图在Swift中使用Objective-C编写的委托方法抛出“无法找到协议
我有一个使用Salesforce SDK的现有Sample 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; } 我正在尝试创建一个RootVC.swift文件来替换RootViewController Objective-c类. 我有一个桥接头文件导入所有在objective-c中导入的头文件 //SwiftForce-Bridging-Header.h #import "SFRestAPI.h" #import "SFRestRequest.h" 我的RooVC.Swift文件如下所示: import UIKit class RootVC: UITableViewController,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和Objective-C类和标头的加载顺序的问题.您必须确保在编译Swift代码之前编译Swift类所需的任何头文件.这与使用简单的.h和.m Objective-C文件相当无缝地处理,但是当使用静态库时(如在项目中),.pch文件似乎是导入Swift代码在编译时需要的任何头文件的最合适的位置.时间. 将此行添加到SwiftForce-Prefix.pch文件似乎有效: #import< SalesforceNativeSDK / SFRestRequest.h> 这看起来并不优雅(就像Bridging-Header解决方案一样)但是只有时间才能证明这是一个错误还是最佳实践. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |