为什么 CGFloat.zero 存在?

scr*_*rrr 3 core-graphics swift

苹果定义的 有什么特别的原因CGFloat.zero吗?我们应该什么时候使用它?和它有什么不同0

Rob*_*ier 8

通用算法建立在协议之上,让我们可以编写适用于多种类型的通用代码。所述AdditiveArithmetic协议要求相符的类型具有零值(.zero),其可以用于需要该算法。有了它,您就可以编写一个可以处理多种不同类型整数(Int16、Int32、Int...)、浮点数(Double、Float、CGFloat...)甚至向量的函数。任何具有算术零、“加法和减法”的概念并且可以等式(因为 AdditiveArithmetic 需要 Equatable)的东西都可以参与。

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

作为如何使用它的示例,请考虑sum(),它可以处理整数、浮点数、向量或任何您想要符合 AdditiveArithmetic 的自定义类型:

extension Sequence where Element: AdditiveArithmetic {
    func sum() -> Element {
        reduce(.zero, +)
    }
}
Run Code Online (Sandbox Code Playgroud)