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
我试图将 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