Search code examples
swifttokbox

Ambiguous reference to member on extension


I make use of the TokBox api. I want to use the signal method. But I get the Ambiguous reference to member 'session' error.

This is the code:

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)")
    }
}

I have the chat() method. but I get the Ambiguous reference to member error at this line:

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

I don't know how to fix it. I have tried welf.session because I thought it is out of scope.

What is causing this issue and how can I resolve it?


Solution

  • Try appending the OTError instance to the function's parameters.

    Also, avoid using force unwrapping and unhandled error catching.

    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)
    }