在Swift类中实现Objective-C协议

时间:2016-11-05 06:15:10

标签: objective-c swift protocols

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

class ViewController: UIViewController, DBRestClientDelegate {
}

我坐着委托属性,称为loadMetadata方法并实现了相应的事件函数:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

$a = new DateTime('2016-11-05 00:00:00');
$b = new DateTime('2016-11-05 00:19:00');
 $diff =  ($b->getTimestamp() - $a->getTimestamp())/60;
 echo $diff;

Source

这就是为什么你不一定需要实现协议中声明的所有方法。通常,只有最重要的方法标有@protocol ProtocolName @required // list of required methods @optional // list of optional methods @end ,因为在调用可选方法时,如果委托实现了它,则应始终检查。