zoukankan      html  css  js  c++  java
  • swfit:运算符重载 Operator Methods

    Operator Methods

    Classes and structures can provide their own implementations of existing operators. This is known as overloading the existing operators.

    1. struct Vector2D {
    2. var x = 0.0, y = 0.0
    3. }
    4. extension Vector2D {
    5. static func + (left: Vector2D, right: Vector2D) -> Vector2D {
    6. return Vector2D(x: left.x + right.x, y: left.y + right.y)
    7. }
    8. }

    The type method can be used as an infix operator between existing Vector2D instances:

    1. let vector = Vector2D(x: 3.0, y: 1.0)
    2. let anotherVector = Vector2D(x: 2.0, y: 4.0)
    3. let combinedVector = vector + anotherVector

    Prefix and Postfix Operators

    The example shown above demonstrates a custom implementation of a binary infix operator. Classes and structures can also provide implementations of the standard unary operators. Unary operators operate on a single target. They are prefix if they precede their target (such as -a) and postfix operators if they follow their target (such as b!).

    Custom Operators

    You can declare and implement your own custom operators in addition to the standard operators provided by Swift. For a list of characters that can be used to define custom operators, see Operators.

    New operators are declared at a global level using the operator keyword, and are marked with the prefixinfix or postfix modifiers:

    1. prefix operator +++

    The example above defines a new prefix operator called +++. This operator does not have an existing meaning in Swift, and so it is given its own custom meaning below in the specific context of working with Vector2D instances. For the purposes of this example, +++ is treated as a new “prefix doubling” operator. It doubles the x and y values of a Vector2D instance, by adding the vector to itself with the addition assignment operator defined earlier. To implement the +++ operator, you add a type method called +++ to Vector2D as follows:

    1. extension Vector2D {
    2. static prefix func +++ (vector: inout Vector2D) -> Vector2D {
    3. vector += vector
    4. return vector
    5. }
    6. }
    7. var toBeDoubled = Vector2D(x: 1.0, y: 4.0)
    8. let afterDoubling = +++toBeDoubled
    9. // toBeDoubled now has values of (2.0, 8.0)
    10. // afterDoubling also has values of (2.0, 8.0)

    https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

  • 相关阅读:
    最全的“大数据”学习资源
    民生银行十五年的数据体系建设,深入解读阿拉丁大数据生态圈、人人BI 是如何养成的?【转】
    大数据分析界的“神兽”Apache Kylin有多牛?【转】
    大数据环境下互联网行业数据仓库/数据平台的架构之漫谈-续【转】
    写给大数据开发初学者的话5[转]
    唯品会海量实时OLAP分析技术升级之路
    大数据学习笔记
    元数据
    数据仓库之数据模型
    官方教程:Apache Kylin和Superset集成,使用开源组件,完美打造OLAP系统
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9855692.html
Copyright © 2011-2022 走看看