美文网首页
Swift - 运算符重载

Swift - 运算符重载

作者: 板鞋飞人 | 来源:发表于2018-08-01 21:01 被阅读0次

一、定义

在Swift的官方文档中运算符重载叫做运算符函数(Operator Functions)。简单来讲主要实现以下三点:

  1. 对已有标准运算符实现的类型覆盖定义自己的函数实现。(重载Int的+号运算符)
  2. 使用已有的标准运算符对未实现该运算符的类型添加该运算符定义。(对CGPoint添加+号运算)
  3. 个性运算符
  • 个性的运算符只能使用这些字符 / = - + * % < > ! & | ^ . ~
  • 新的运算符声明需在全局域使用operator关键字声明,可以声明为前缀、中缀、后缀的,分别用prefix、infix、postfix修饰。

注:三元运算符a ? b : c和默认的默认的赋值运算符= 不可重载的。

二、示例

1、一元运算符

  • 前缀运算符

要在func关键字前添加prefix关键字修饰

  extension CGPoint {
      static prefix  func - (point: CGPoint) -> CGPoint {
          return CGPoint(x: -point.x, y: -point.y)
      }
  }
  let p1 = CGPoint(x: 1, y: 1)
  let p2 = -p1
  // p2为 (-1, -1 )
  • 后缀运算符

要在func关键字前添加prefix关键字修饰

  extension CGPoint {
      static postfix  func ++ (point: CGPoint) -> CGPoint {
          return CGPoint(x: point.x * 2, y: point.y * 2)
      }
  }
  let p1 = CGPoint(x: 2, y: 2)
  let p2 = p1++
  // p2为 (4, 4 )

2、二元运算符

  • 组合赋值运算符

extension CGPoint {
    static func += (left: inout CGPoint, right: CGPoint) {
        left = left + right
    }
}
var p1 = CGPoint(x: 2, y: 2)
let p2 = CGPoint(x: 3, y: 3)
p1 += p2
// p1为 (5, 5 )
  • 其它二元运算符

extension CGPoint {
    static func + (left: inout CGPoint, right: CGPoint) {
        return CGPoint(x: left.x + right.x, y: left.y + right.y)
    }
}
let p1 = CGPoint(x: 2, y: 2)
let p2 = CGPoint(x: 3, y: 3)
let p3 = p1 + p2
// p1为 (5, 5 )

3、自定义运算符

prefix operator +++
extension CGPoint {
    static prefix  func +++ (point: CGPoint) -> CGPoint {
        return CGPoint(x: point.x * 3, y: point.y * 3)
    }
}
let p1 = CGPoint(x: 2, y: 2)
let p2 = +++p1
// p2为 (6, 6 )

相关文章

  • swift重载或自定义操作符

    重载运算符 在Swift中,类和结构体是可以提供现有运算符的自定义实现,也就是重载现有运算符。三元运算符(a?b:...

  • 每天学一点Swift---- 运算符函数

    一.运算符重载 1. Swift的运算符提供了良好的可扩展性,Swift不仅允许开发者重新定义已有的运算符(运算符...

  • swift 应用

    //swift 暴露 objc 调用 //swift 调用 objc //自定义表达式模式 (重载运算符 ~=,自...

  • Swift - 运算符重载

    一、定义 在Swift的官方文档中运算符重载叫做运算符函数(Operator Functions)。简单来讲主要实...

  • 运算符重载及其他约定

    7.1 重载算术运算符 重载二元算术运算符 重载复合赋值运算符 重载一元运算符 重载比较运算符 等号运算符:‘eq...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 2019-07-11 运算符的重载

    运算符的重载 重载运算符 (“::”,“.*”,“.”,“?:”)不能被重载。 重载运算符时,不能改变其本质,如不...

  • Swift重载运算符

    [TOC] Swift重载运算符 运算符重载允许你改变现在的作用在特定在的结构体和类上的已经存在的操作符的工作方式...

  • swift中的运算符重载

    在Swift的官方文档中运算符重载叫做运算符函数(Operator Functions),顾名思义就是对已经有的运...

  • 运算符重载

    一.+号运算符重载 二.<<号运算符重载 三.指针运算符重载(智能指针)

网友评论

      本文标题:Swift - 运算符重载

      本文链接:https://www.haomeiwen.com/subject/ozarvftx.html