Swift-postfix 运算符

内容:

1. 运算符作用位置的说明

// =运算符是中置运算符
var a = 0 
// +=同样是中置
a += 1
// ++运算符是右置
a = a++
// --运算符是左置
a = --a

如何做到在左侧,中间还是右侧执行呢?

  • 前置运算符:prefix
// 实现oc里面的 -- 运算
prefix func --(x: inout Int) {
    x -= 1
}
var a = 3
 --a
  • 后置运算符:postfix
// 实现字符串的对可选值值的强解包崩溃处理
postfix func ~(str: String?) -> String {
    return str == nil ? "" : str!
}

 let optionalStr: String? = nil
 let str1 = optionalStr~     // 为 “”
 let str = optionalStr!      // 崩溃

// 实现oc里面的++运算符
postfix func ++(x: inout Int) {
    x += 1
}
 var a = 0
 a++
  • 中间运算符:infix
//中间:计算N的M次方,左结合,优先级为255
infix operator ^^
func ^^(left: Double, right: Double) -> Double {
    return pow(left, right)
}
print(2 ^^ 3) // 8.0

用以上三个不同的关键词修饰,可以在不同的位置起效果

2. 运算符的重载

对系统的运算符进行重新赋职能。
“=”是不可以进行重载的

struct Vector3 {
    
    var x: Double = 0.0
    var y: Double = 0.0
    var z: Double = 0.0
    
    func length() -> Double {
        return sqrt(x * x + y * y + z * z)
    }
}

// 重载乘号(*)
func *(left: Vector3, right: Vector3) -> Double {
    return left.x * right.x + left.y * right.y + left.z * right.z
}

var vector3 = Vector3(x: 1, y: 2, z: 3)
var vector4 = Vector3(x: 2, y: 5, z: -3)
vector3 * vector4

3. 自定义运算符

除了标准运算符,Swift还可以声明和实现自定义运算符。
自定义运算符需要在全局作用域通过关键字operator进行定义,同时要指定prefix(前缀)、infix(中缀)或postfix(后缀)修饰符

prefix operator  +++

自定义运算符仅能包含这些字符:/ = - + * % < >!& | ^。~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本章将会介绍 模块和源文件访问级别访问控制语法自定义类型子类常量、变量、属性、下标构造器协议扩展泛型类型别名位运算...
    寒桥阅读 1,053评论 0 2
  • 操作符 操作符优先级 在像 1 + 2 * 3 这样的表达式中, 2 * 3 被首先计算, 因为中缀操作符 * ...
    焉知非鱼阅读 1,634评论 0 1
  • 案例代码下载 高级运算符 除了基本运算符中描述的运算符之外,Swift还提供了几个执行更复杂值操作的高级运算符。这...
    酒茶白开水阅读 965评论 0 0
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,409评论 0 51
  • 有时候我也想我自己。也想一些别的事情。但更多的是对自己做过的事感到尴尬。也在想这件事如果现在怎么做。可惜没有如果。...
    温煦年阅读 149评论 0 0

友情链接更多精彩内容