Как добавить параметр sessionDelegate в конфигурацию SocketManager Swift - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь подключиться к самозаверяющему SSL URL. Но когда я добавляю sessionDelegate в качестве опции, он не работает.

import Foundation
import SocketIO
import UIKit
class SocketM: NSObject, URLSessionDelegate {
    static var manager = SocketManager(socketURL: URL(string:"https://localhost:8000")!, config: [.log(true), .secure(true), .selfSigned(true), .sessionDelegate(self)])

    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        let protectionSpace = challenge.protectionSpace
        guard protectionSpace.authenticationMethod ==
            NSURLAuthenticationMethodServerTrust,
            protectionSpace.host.contains(Services_Routes.host) else {
                completionHandler(.performDefaultHandling, nil)
                return
        }
        guard let serverTrust = protectionSpace.serverTrust else {
            completionHandler(.performDefaultHandling, nil)
            return
        }
        let credential = URLCredential(trust: serverTrust)
        completionHandler(.useCredential, credential)
    }

Он возвращает мне Тип 'Любой' не имеет члена 'sessionDelegate'

Когда я пытаюсь:

SocketIOClientOption.sessionDelegate(self)

Тип '(SocketM) -> () -> SocketM' не соответствует протоколу 'URLSessionDelegate'

Может кто-нибудь объяснить мне проблему? Спасибо!

1 Ответ

0 голосов
/ 20 февраля 2020

Вы создаете переменную stati c и передаете делегат как "self", вы не можете использовать self перед инициализацией объекта.

Если вам не нужен объект stati c объекта manager, тогда вы можно написать код как

class SocketM: NSObject, URLSessionDelegate {
    var manager: SocketManager?

    override init() {
        super.init()
        manager = SocketManager(socketURL: URL(string:"https://localhost:8000")!, config:  [.log(true), .reconnects(true), .selfSigned(true), .sessionDelegate(self)])
    }
}

И если вы хотите, чтобы * c менеджер

class SocketM: NSObject, URLSessionDelegate {
    static var manager = SocketManager(socketURL: URL(string:"https://localhost:8000")!, config:  [.log(true), .reconnects(true), .selfSigned(true)])

    override init() {
        super.init()
        SocketM.manager.config.insert(.sessionDelegate(self))
    }
}
...