我有一道理解题。我想在 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
这就是为什么您不一定需要实现协议(protocol)中声明的所有方法。通常,只有最重要的方法才用 @required
标记,因为在调用可选方法时,您应该始终检查委托(delegate)是否实现了它。
关于objective-c - 在 Swift 类中实现 Objective-C 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435351/