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
相关产品推荐
相关产品推荐

