Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了试图在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 *da@R_490_2301@ws;
    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,它将正确进入协议实现.
但是,如果我尝试构建,我得到..“找不到协议声明SFRestDelegate错误

SWIFT_CLASS("_TtC10SwiftForce6RootVC")
@interface RootVC : UITableViewController <SFRestDelegate>
@property (nonatomiC) NSArray * da@R_490_2301@ws;
- (instanCETypE)initWithStyle:(UITableViewStylE)style OBJC_DESIGNATED_INITIALIZER;
- (void)viewDidLoad;
- (void)didReceiveMemoryWarning;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
@end

感谢任何帮助.您可以通过从以下位置下载应用来测试它:
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解决方案一样)但是只有时间才能证明这是一个错误还是最佳实践.

大佬总结

以上是大佬教程为你收集整理的试图在Swift中使用Objective-C编写的委托方法抛出“无法找到协议声明”全部内容,希望文章能够帮你解决试图在Swift中使用Objective-C编写的委托方法抛出“无法找到协议声明”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。