对分机成员的模糊引用

Ambiguous reference to member on extension

我使用 TokBox api。我想使用信号方法。但是我得到了对成员 'session' 错误的不明确引用。

这是代码:

import UIKit
import OpenTok
import Firebase
import FontAwesome_swift

class CallView: UIViewController {

    private var session: OTSession?
    private var publisher  : CustomPublisher?

override func viewDidLoad() {
        super.viewDidLoad()

        //connect to the session
        connectToAnOpenTokSession()
    }

func connectToAnOpenTokSession() {
        session = OTSession(apiKey: "xxx", sessionId: "xxx", delegate: self)
        var error: OTError?
        session?.connect(withToken: "xxx", error: &error)
        if error != nil {
            print(error!)
        }
    }
}


extension CallView: OTSessionDelegate {
    func sessionDidConnect(_ session: OTSession) {
        print("The client connected to the OpenTok session.")

        var error: OTError? = nil
        defer {
            print(error.debugDescription)
        }
    }

 func chat(){
        var error: OTError? = nil

        try? session!.signal(withType: "chat", string: "bla", connection: nil)
        if error != nil {
            print("Signal error: \(error)")
        }
        else {
            print("Signal sent: ")
        }
    }

    func sessionDidDisconnect(_ session: OTSession) {
        print("The client disconnected from the OpenTok session.")
    }

    func session(_ session: OTSession, didFailWithError error: OTError) {
        print("The client failed to connect to the OpenTok session: \(error).")
    }
    func session(_ session: OTSession, streamCreated stream: OTStream) {
        print("A stream was created in the session.")
    }

    func session(_ session: OTSession, streamDestroyed stream: OTStream) {
        print("A stream was destroyed in the session.")
    }
}

extension CallView: OTPublisherDelegate {
    func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
        print("The publisher failed: \(error)")
    }
}

我有chat()方法。但是我在这一行得到了对成员错误的模糊引用:

试试? session!.signal(withType: "chat", string: "bla", connection: nil)

我不知道如何修复它。我试过 welf.session 因为我认为它超出了范围。

是什么导致了这个问题,我该如何解决?

尝试将 OTError 实例附加到函数的参数。

此外,避免使用强制展开和未处理的错误捕获。

guard let tokSession = session else {
    return
}

do {
    var error: OTError? = nil
    try tokSession.signal(withType: "chat", string: "bla", connection: nil, error: error)

    if error != nil {
        print("Signal error: \(error)")
    } else {
        print("Signal sent: ")
    }
} catch let error {
    print(error.localizedDescription)
}