Swift CGFloat.zero为什么存在?

Swift CGFloat.zero为什么存在?,swift,core-graphics,Swift,Core Graphics,AppleCGFloat.zero有什么特别的原因吗?我们应该什么时候使用它?它与0有何不同?通用算法是建立在协议之上的,这些协议允许我们编写可应用于多种类型的通用代码。协议要求一致性类型具有零值(.zero),可用于需要该值的算法。这样,您就可以编写一个函数来处理多种不同类型的整数(Int16、Int32、Int…)、浮点(Double、Float、CGFloat…)甚至向量。任何具有算术零、“加减”概念且可以相等的东西(因为加法运算需要相等),都可以参与 AdditiveArtimetic不

Apple
CGFloat.zero
有什么特别的原因吗?我们应该什么时候使用它?它与
0
有何不同?

通用算法是建立在协议之上的,这些协议允许我们编写可应用于多种类型的通用代码。协议要求一致性类型具有零值(
.zero
),可用于需要该值的算法。这样,您就可以编写一个函数来处理多种不同类型的整数(Int16、Int32、Int…)、浮点(Double、Float、CGFloat…)甚至向量。任何具有算术零、“加减”概念且可以相等的东西(因为加法运算需要相等),都可以参与

AdditiveArtimetic不要求类型符合ExpressibleByIntegerLiteral,这意味着可能无法使用
0
符号创建类型。向量类型通常不会以这种方式初始化,但仍然具有“零值”

作为如何使用这个例子,请考虑<代码> SUME()/代码>,它可以处理整数、浮点数、向量或您希望使之符合附加值的任何自定义类型:

extension Sequence where Element: AdditiveArithmetic {
    func sum() -> Element {
        reduce(.zero, +)
    }
}

1)考虑值不是<代码> 0 <代码>(整数),在某些上下文中直接替换会导致不正确的结果;2) 看到了吗?所以把这两者放在一起,就有了一个关于代码样式和明确性的很好的论据。两者都不需要使用。一个很大的区别是
0
不是CGFloat。@SCRR如果我编辑这个问题,使其“可以用事实和引用来回答”,可以吗?然后它可以重新打开。@BartvanKuik当然可以!