You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:45:00