objective-c - 在 Swift 类中实现 Objective-C 协议(protocol)

标签 objective-c swift protocols

我有一道理解题。我想在 iOS Swift 应用程序中使用 Dropbox Objective-C 框架。
我已经成功导入了框架并在桥接 header 中设置了导入子句。
我还能够运行授权过程,所以我认为该框架有效。
然后我尝试使用声明为协议(protocol)的框架组件:

class ViewController: UIViewController, DBRestClientDelegate {
}

我设置了delegate属性,调用了loadMetadata方法并实现了相应的事件函数:

let dbRestClient = DBRestClient(DBSession.shared())
dbRestClient.delegate = self
dbRestClient.loadMetadata("/")
...

func restClient(client: DBRestClient!, loadedMetadata metadata: DBMetadata!) {
}

我想知道的是,似乎没有必要实现该协议(protocol)的所有方法。这个对吗?在 Swift 中只实现协议(protocol)的一部分就够了吗?
我问是因为编译器没有显示任何错误,但从未调用委托(delegate)方法。

最佳答案

通常,在 Swift 中,您必须实现协议(protocol)的所有方法。 (请参阅有关可选协议(protocol)方法的问题:How to define optional methods in Swift protocol?)

但是正如您所说,该框架是用 Objective-C 编写的。 Objective-C 支持协议(protocol)中的可选方法。

@protocol ProtocolName
@required
// list of required methods
@optional
// list of optional methods
@end

Source


这就是为什么您不一定需要实现协议(protocol)中声明的所有方法。通常,只有最重要的方法才用 @required 标记,因为在调用可选方法时,您应该始终检查委托(delegate)是否实现了它。

关于objective-c - 在 Swift 类中实现 Objective-C 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435351/

相关文章:

ios - 通用 RawRepresentable 协议(protocol)属性

email - 为什么仍在使用 POP3 协议(protocol)?

iphone - iPad 中的洪水填充速度太慢

objective-c - Xcode 静态分析器和 copyWithZone

ios - 如何从标签栏项目中呈现 UIImagePickerController

ios - 避免我的 iOS 应用程序中的文件易于替换

networking - 请启用 TCP/IP 协议(protocol)。 Unity3D

ios - 在两个iOS设备之间通过蓝牙传输类(class)

ios - 如何在文档文件夹中调用plist文件

swift - 实现 Seguey 改变了 Swift 中安全区域的大小