swif学习之自定义运算符
来源:互联网 发布:pscs6软件官方下载 编辑:程序博客网 时间:2024/06/06 00:32
转载请保留原文链接:http://www.yiibai.com/swift/custom_operators.html
自定义运算符
标准的运算符不够玩,那你可以声明一些个性的运算符,但个性的运算符只能使用这些字符/ = - + * % < >!& | ^。~
。
新的运算符声明需在全局域使用operator
关键字声明,可以声明为前置,中置或后置的。
operator prefix +++ {}
这段代码定义了一个新的前置运算符叫+++
,此前Swift并不存在这个运算符。此处为了演示,我们让+++
对Vector2D
对象的操作定义为 双自增
这样一个独有的操作,这个操作使用了之前定义的加赋运算实现了自已加上自己然后返回的运算。
@prefix @assignment func +++ (inout vector: Vector2D) -> Vector2D { vector += vector return vector}
Vector2D
的 +++
的实现和 ++
的实现很接近, 唯一不同的前者是加自己, 后者是加值为 (1.0, 1.0)
的向量.
var toBeDoubled = Vector2D(x: 1.0, y: 4.0)let afterDoubling = +++toBeDoubled// toBeDoubled 现在是 (2.0, 8.0)// afterDoubling 现在也是 (2.0, 8.0)
自定义中置运算符的优先级和结合性
可以为自定义的中置运算符指定优先级和结合性。可以回头看看优先级和结合性解释这两个因素是如何影响多种中置运算符混合的表达式的计算的。
结合性(associativity)的值可取的值有left
,right
和none
。左结合运算符跟其他优先级相同的左结合运算符写在一起时,会跟左边的操作数结合。同理,右结合运算符会跟右边的操作数结合。而非结合运算符不能跟其他相同优先级的运算符写在一起。
结合性(associativity)的值默认为none
,优先级(precedence)默认为100
。
以下例子定义了一个新的中置符+-
,是左结合的left
,优先级为140
。
operator infix +- { associativity left precedence 140 }func +- (left: Vector2D, right: Vector2D) -> Vector2D { return Vector2D(x: left.x + right.x, y: left.y - right.y)}let firstVector = Vector2D(x: 1.0, y: 2.0)let secondVector = Vector2D(x: 3.0, y: 4.0)let plusMinusVector = firstVector +- secondVector// plusMinusVector 此时的值为 (4.0, -2.0)
这个运算符把两个向量的x
相加,把向量的y
相减。因为他实际是属于加减运算,所以让它保持了和加法一样的结合性和优先级(left
和140
)。查阅完整的Swift默认结合性和优先级的设置,请移步表达式;
0 0
- swif学习之自定义运算符
- Swif学习之路
- swif字典之dict
- MySQL学习20:运算符与函数之自定义函数
- Swif学习总结 基本数据类型(一)
- java学习之运算符
- Python学习之运算符
- Python学习之运算符
- python3学习之运算符
- swif之UITableViewCell和UITableView常见属性复习
- java学习04--运算符之算术运算符
- Java学习05--运算符之赋值运算符
- Linux学习之数值运算与运算符
- 19、C++运算符重载之自定义类型转换
- Swift 自定义运算符
- PHP学习之PHP运算符
- c# 学习总结 之 运算符
- C++学习笔记之运算符重载
- java 加密
- 《Swift编程语言》中文翻译及读书笔记page21
- Just a Hook
- 删除外键限制记录
- ssh项目异常用处理方式
- swif学习之自定义运算符
- 通用分页方法
- Swift学习之闭包疑惑解析1
- 二分查找
- [转] 两种老公,两种人生。。(女人该看,男生更该看)
- 今日作息及食谱(7.6)
- Android应用程序的数据存放目录解说
- boost condition
- VS2010为新添加的对话框添加OnInitDialog()方法,即重写OnInitDialog()