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

时间:2015-03-19 17:29:31

标签: ios objective-c swift opentok

我尝试将OpenTok getting started objective-c代码翻译成swift,并且尽管符合协议,但仍然存在协议一致性错误。只有我的类定义中存在OTPublisherDelegate协议才能创建发生错误的场景。

错误消息是:

  

ViewController类型不符合协议'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库中的所有其他协议进行编译。

1 个答案:

答案 0 :(得分:1)

当然我在发布后想出来了。

问题在于此方法签名

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

我忘记了Swift的方法签名不仅要遵循相同的参数类型和顺序,还要遵循参数的外部和内部名称。在我的情况下,我忘记了第二个参数的内部参数名称。

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

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

我 - >捂脸