繁体   English   中英

为什么 CGFloat.zero 存在?

[英]Why does CGFloat.zero exist?

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

通用算法建立在协议之上,让我们可以编写适用于多种类型的通用代码。 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, +)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM