【发布时间】:2022-07-14 13:04:46
【问题描述】:
我正在快速使用 SignalR,我正在尝试订阅不同的功能。
文档说 (https://github.com/moozzyk/SignalR-Client-Swift)
"值得注意的是,处理程序参数的类型必须是 指定并且必须与发送的值的类型兼容 服务器(例如,如果服务器使用字符串调用方法 处理程序的参数类型不能是 Int)。处理程序数量 参数应与用于调用 来自服务器端的客户端方法。
所以我对参数唯一了解的是它们符合可解码,所以这是我处理它们的通用函数。
private func subscribe<T:Decodable>(_ hubConnection: HubConnection, _ methodName: String, _ callback: @escaping ([T?])->()) {
switch expectedParametersCount {
case 2:
hubConnection.on(method: methodName) { arg1, arg2 in
self.addAction({ callback([arg1, arg2])})
}
break
}
这是我调用订阅函数并遇到麻烦的地方
private func hubConnSubscribe(_ hubConnection: HubConnection) {
for kvPair in methodSubscriptions {
subscribe(hubConnection, kvPair.key, kvPair.value)
}
}
但是当我尝试存储它们时遇到了问题:这是我的字典。
private var methodSubscriptions = [String : ([Any?])->()]()
这给了我错误
Protocol 'Any' 作为类型不能符合 'Decodable'
如果我把它改成
[String : ([Decodable?])->()]()
然后我得到
Protocol 'Decodable' 作为一种类型不能符合协议本身
所以我的问题是我的字典应该是什么样子?
【问题讨论】: