Swift Socket编程调用代理方法时报CGPoint无法转换为SocketPosition类型错误
错误原因
编译报错的核心是参数类型不匹配:你在Socket事件回调中将解析得到的SocketPosition对象提前转换成了CGPoint类型再传给代理,但你的代理方法didReceive(point:)声明的入参要求是SocketPosition类型,两种类型无法直接兼容,因此触发类型转换错误。
可选用的两种修复方案
- 方案1:适配现有代理方法,直接传递
SocketPosition类型参数
你的代理方法内部本身就会把SocketPosition转成CGPoint给UIView赋值,不需要在回调中提前转换,修改socketEvents方法中的对应逻辑即可:
func socketEvents() { socket?.on(clientEvent: .connect) {data, ack in self.delegate?.didConnect() } socket?.on("drawing") { (data, ack) in guard let dataInfo = data.first else { return } if let response: SocketPosition = try? SocketParser.convert(data: dataInfo) { // 直接传解析得到的SocketPosition对象,不需要提前转CGPoint self.delegate?.didReceive(point: response) } } }
- 方案2:修改代理方法入参类型,接收
CGPoint
如果你期望代理层直接接收可用于UI赋值的坐标类型,可以直接修改代理方法的入参声明,省去代理内部的类型转换步骤:
// 代理方法实现修改为入参接收CGPoint func didReceive(point: CGPoint){ element.center = point }
内容的提问来源于stack exchange,提问作者user9183711
相关产品推荐
相关产品推荐

