【问题标题】:Swift Protocol Conformance Error for OpenTok/TokBoxOpenTok/TokBox 的 Swift 协议一致性错误
【发布时间】:2025-12-24 12:25:11
【问题描述】:

我试图将 OpenTok getting startedobjective-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 库中的所有其他协议进行编译。

【问题讨论】:

    标签: ios objective-c swift opentok


    【解决方案1】:

    当然,我是在发帖后才知道的。

    问题在于这个方法签名

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

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

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

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

    我 -> 掌心

    【讨论】:

    • 感谢您发布此信息!我有同样的问题。顺便说一句,在您的解决方案中,您不小心遇到错误:OTStream!应该是错误:OTError!。
    • 谢谢杰里米。我修好了。