我尝试将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库中的所有其他协议进行编译。
答案 0 :(得分:1)
当然我在发布后想出来了。
问题在于此方法签名
func publisher(publisher: OTPublisherKit!, didFailWithError: OTError!) { }
我忘记了Swift的方法签名不仅要遵循相同的参数类型和顺序,还要遵循参数的外部和内部名称。在我的情况下,我忘记了第二个参数的内部参数名称。
正确的方法签名如下所示:
func publisher(publisher: OTPublisherKit!, didFailWithError error: OTError!) { }
我 - >捂脸