我有一个使用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;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个RootVC.swift文件来替换RootViewController Objective-c类.
我有一个桥接头文件导入所有在objective-c中导入的头文件
//SwiftForce-Bridging-Header.h
#import "SFRestAPI.h"
#import "SFRestRequest.h"
Run Code Online (Sandbox Code Playgroud)
我的RooVC.Swift文件如下所示:
import UIKit
class RootVC: UITableViewController,SFRestDelegate {
..
..
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我命令+单击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
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助.您可以从以下 网址下载应用程序来测试它:https ://github.com/rajaraodv/SwiftForce
我刚给你发送拉动请求给你链接的回购解决了问题.
您的问题似乎是Swift和Objective-C类和标头的加载顺序的问题.您必须确保在编译Swift代码之前编译Swift类所需的任何头文件.这与使用简单的.h和.m Objective-C文件相当无缝地处理,但是当使用静态库时(如在项目中),.pch文件似乎是导入Swift代码在编译时需要的任何头文件的最合适的位置.时间.
将此行添加到SwiftForce-Prefix.pch文件似乎有效:
#import <SalesforceNativeSDK/SFRestRequest.h>
这看起来并不优雅(就像Bridging-Header解决方案一样)但是只有时间才能证明这是一个错误还是最佳实践.
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |