【问题标题】:Implementing Objective-C protocol in Swift class在 Swift 类中实现 Objective-C 协议
【发布时间】:2017-03-19 00:51:38
【问题描述】:

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

class ViewController: UIViewController, DBRestClientDelegate {
}

我坐了delegate属性,调用了loadMetadata方法,实现了对应的事件函数:

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

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

我想知道的是,似乎没有必要实现该协议的所有方法。它是否正确?在 Swift 中只实现协议的一部分就足够了吗?
我问是因为编译器没有显示错误,但从未调用过委托方法。

【问题讨论】:

    标签: objective-c swift protocols


    【解决方案1】:

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

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

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

    Source


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

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多