Objective-C 协议在 Swift 中无法识别

Objective-C protocol not recognized in Swift

我正在开发一个用 Objective-C 编写的应用程序,我们想开始将一些 Swift 集成到其中。

我在 Swift 中编写了一个简单的视图控制器 class,要在应用程序中工作,它必须符合在 Objective-C 中编写的协议。在我的 Swift class 中,我有以下声明:

@objc class SwfViewController: UIViewController, theProtocolName {
    //some code
}

在我的桥接头文件中,我引用了 class 协议名称。

#import "theProtocolName.h"

我已经实现了协议中列出的所有必需方法,但我仍然收到一条错误消息

SwfViewController does not conform to protocol 'theProtocolName'

我是 Swift 的新手,很容易漏掉一些东西。有什么检查的建议吗?谢谢!

一般来说,此错误意味着您的 class 缺少必需的方法,这是协议要点的一部分。 class 似乎意识到它需要遵循您告诉它的协议,但现在需要定义所需的部分。

您应该能够展开错误消息,方法是单击它以找出缺少的部分。

您应该考虑到方法的 Swift 签名与 objective-c 略有不同。例如:

这样的协议:

@protocol MyProtocol <NSObject>

  - (void)didFinish:(MyClass *)class withError:(id)errorMessage;

@end

在Swift中符合这个协议的class应该是:

@objc class SwfViewController: UIViewController, MyProtocol {
  func didFinish(whatEveryouWant1: UIViewController!, withError whatEverYouWant2: AnyObject!){

  }
}

请注意 id 变为 AnyObject 并且 Obj-C 引用翻译为 !作为隐式展开的选项。