Swift OpenTok/TokBox 的协议一致性错误

Swift Protocol Conformance Error for OpenTok/TokBox

我试图将 OpenTok getting started objective-c 代码翻译成 swift,尽管符合协议,但在协议一致性方面出现错误。只有在我的 class 定义中 OTPublisherDelegate 协议的存在才造成了错误发生的场景。

错误信息是:

The type ViewController does not conform to the protocol 'OTPublisherKitDelegate'

但是,至少据我所知,我已经实现了 OTPublisherKitDelegate 中的所有方法。

这是示例代码(为简洁起见,方法为空)

import UIKit
import OpenTok

class ViewController: UIViewController, OTSessionDelegate, OTSubscriberKitDelegate, OTPublisherDelegate {

//MARK:OTSessionDelegate implementation
func sessionDidConnect(session: OTSession!) { }
func sessionDidDisconnect(session: OTSession!) { }
func session(session: OTSession!, didFailWithError error: OTError!) { }
func session(session: OTSession!, streamCreated stream: OTStream!) { }
func session(session: OTSession!, streamDestroyed stream: OTStream!) { }

//MARK:OTSubscriberKidDelegate implementation
func subscriberDidConnectToStream(subscriber: OTSubscriberKit!) { }
func subscriber(subscriber: OTSubscriberKit!, didFailWithError error: OTError!) { }

//MARK:OTPublisherDelegate implementation
func publisher(publisher: OTPublisherKit!, streamCreated stream: OTStream!) { }
func publisher(publisher: OTPublisherKit!, streamDestroyed stream: OTStream!) { }
func publisher(publisher: OTPublisherKit!, didFailWithError: OTStream!) { }
}

如果我从项目编译的继承协议列表中删除 OTPublisherDelegate。不幸的是,我一直无法使用 OpenTok 文档(这是很好的文档)找到解决方案。

OpenTok 依赖项通过 CocoaPods 进行管理,并且正在针对 OpenTok 库中的所有其他协议进行编译。

当然,我在发帖后就明白了。

这个方法签名有问题

func publisher(publisher: OTPublisherKit!, didFailWithError: OTError!) { }

我忘记了 Swift 的方法签名不仅必须遵循相同的参数类型和顺序,而且还必须遵循参数的外部和内部名称。在我的例子中,我忘记了第二个参数的内部参数名称。

正确的方法签名如下所示:

func publisher(publisher: OTPublisherKit!, didFailWithError error: OTError!) { }

我 -> Facepalm