Swift >lhs.x+=rhs.xlhs.y+=rhs.y上的大量重载历来是编译时性能问题的根源。但是,它对运行时没有任何影响。主要症状是当您尝试将多个+链接在一起时,如x+y+z+a+b(您会遇到类似“无法在合理时间内进行类型检查”的错误)。这几年来已经有了显著

Swift >lhs.x+=rhs.xlhs.y+=rhs.y上的大量重载历来是编译时性能问题的根源。但是,它对运行时没有任何影响。主要症状是当您尝试将多个+链接在一起时,如x+y+z+a+b(您会遇到类似“无法在合理时间内进行类型检查”的错误)。这几年来已经有了显著,swift,Swift,>lhs.x+=rhs.xlhs.y+=rhs.y上的大量重载历来是编译时性能问题的根源。但是,它对运行时没有任何影响。主要症状是当您尝试将多个+链接在一起时,如x+y+z+a+b(您会遇到类似“无法在合理时间内进行类型检查”的错误)。这几年来已经有了显著的改善,但我仍然倾向于非常小心地为+添加新的重载:D@swiftPunk+=不返回任何值,它实际上会改变运算符的左侧,这就是为什么需要使用inout关键字的原因。我已经告诉过你应该如何实施它。如果要使用上面显示的其他实现,请删除返回类型。@Le


>
lhs.x+=rhs.x
lhs.y+=rhs.y
上的大量重载历来是编译时性能问题的根源。但是,它对运行时没有任何影响。主要症状是当您尝试将多个
+
链接在一起时,如
x+y+z+a+b
(您会遇到类似“无法在合理时间内进行类型检查”的错误)。这几年来已经有了显著的改善,但我仍然倾向于非常小心地为
+
添加新的重载:D@swiftPunk
+=
不返回任何值,它实际上会改变运算符的左侧,这就是为什么需要使用
inout
关键字的原因。我已经告诉过你应该如何实施它。如果要使用上面显示的其他实现,请删除返回类型。@LeoDabus:您是最好的!谢谢我实际上专注于使用+func,而忽略了变异的事实!但我要说的是,在Swift中,向
+
添加额外的重载历来是导致编译时大量减速的原因(因为
+
有很多重载)。编译器已经变得更好了,但确实存在一些压力,不能添加更多的随机
+
重载。但苹果不做某件事的更常见原因是“苹果觉得他们不需要它”。通常没有明确的“我们决定,以官方的、有文件记录的方式,不做那件事。”(尽管有时会……隐藏在某个论坛帖子中……)马特的观点很好:猜测苹果的意图通常只是猜测。@swiftPunk你也可以实现
+=
操作符
static func+=(lhs:inout Self,rhs:Self){
lhs.y+=rhs.y
上的大量重载历来是编译时性能问题的根源。但是,它对运行时没有任何影响。主要症状是当您尝试将多个
+
链接在一起时,如
x+y+z+a+b
(您会遇到类似“无法在合理时间内进行类型检查”的错误)。这几年来已经有了显著的改善,但我仍然倾向于非常小心地为
+
添加新的重载:D@swiftPunk
+=
不返回任何值,它实际上会改变运算符的左侧,这就是为什么需要使用
inout
关键字的原因。我已经告诉过你应该如何实施它。如果要使用上面显示的其他实现,请删除返回类型。@LeoDabus:您是最好的!谢谢我实际上专注于使用+func,而忽略了变异的事实!
extension CGPoint {
    
    static func + (lhs: CGPoint, rhs: CGPoint) -> CGPoint {
        
        return CGPoint(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
    }
    
}
extension CGPoint {

    static func += (lhs: inout CGPoint, rhs: CGPoint)  {
        
        lhs = lhs + rhs
        
    }

}