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

Xcode归档含嵌入式WatchOS的iOS应用时CGPoint扩展编译报错

问题解决:WatchOS归档时CGPoint扩展的类型不匹配错误

问题根源

CGPoint的x和y属性实际是CGFloat类型,而CGFloat是平台相关的类型别名——在部分构建配置下它会映射为Float,而非固定的Double。你直接用Double作为乘法操作的右操作数,在普通模拟器/设备构建时隐式转换可以通过,但归档过程中更严格的类型检查或编译优化会触发类型不匹配错误。

解决方案

将扩展中的右操作数类型从Double改为CGFloat,让操作数类型和CGPoint的属性类型完全匹配:

public extension CGPoint {
    static func * (lhs: CGPoint, rhs: CGFloat) -> CGPoint {
        return CGPoint(x: lhs.x * rhs, y: lhs.y * rhs)
    }
}

额外说明

如果你的业务场景确实需要接收Double类型的参数,可以在方法内部显式转换为CGFloat,避免隐式转换带来的不确定性:

public extension CGPoint {
    static func * (lhs: CGPoint, rhs: Double) -> CGPoint {
        let scalar = CGFloat(rhs)
        return CGPoint(x: lhs.x * scalar, y: lhs.y * scalar)
    }
}

这种写法既保留了接收Double参数的能力,又通过显式转换消除了跨平台/构建配置的类型差异问题。

内容的提问来源于stack exchange,提问作者Joris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:01