本篇分为两部分:

1、Swift 中重载操作运算符的使用

2、Swfit 中 func 的参数修饰


1、Swift 中重载操作运算符的使用

与别的语言不同,Swift 支持运算符的重载,运算符指的是“+,-,%,*”等操作运算符,从而使一些操作更加简便。

在开发中,我们对于一些基本运算通常是这样写的:

struct Vector2D {
var x = 0.0
var y = 0.0
} let v1 = Vector2D(x: , y: )
let v2 = Vector2D(x: , y: )
let v3 = Vector2D(x: v1.x+v2.x, y: v1.y+v2.y)

v3 的输出结果为:3,7

但是,当这种二位数组过多时,如果我们依然用这种方式,我们的代码将变得异常臃肿,程序员也会变得没有耐心,所以 Swift 为了提高工作效率,创造出了重载运算符这种文艺的编程方式,上面的代码可以优化为:

// Swift 支持重载操作符这样的特性,从而使一些计算更加简便
func +(left: Vector2D, right:Vector2D) -> Vector2D {
return Vector2D(x: left.x + right.x, y: left.y + right.y)
} let v = v1 + v2 + v3 // 再往后继续加都可以

v 的输出结果为:6,14

因为 +, -, * 这样的操作符是因为 Swift 中已经有定义了,所以不会保错,如果我们要加入新的操作符的话,需要先对其进行声明

infix operator +* {  // infix:表示要定义的是一个中位操作符,即前后都是输入;其他的修饰还包括 prefix 和 postfix
associativity none // associativity:定义结合律,规定计算顺序,加法减法为 left,点乘用 none
precedence // precedence:运算的优先级,Swift 中乘除的优先级是150,加减是140 }
func +*(left: Vector2D, right:Vector2D) -> Double {
return left.x * right.x + left.y * right.y
}
let result1 = v1 +* v2

result1 的输出结果为:14.0

注意:Swift 的操作符是不能定义在局部域中的,因为至少会希望能在全局范围内使用你的操作符,否则操作符就失去意义了


2、Swfit 中 func 的参数修饰

在 Swift 中所有的变量都被默认为不可变的,也就是用 let 进行声明,在方法上也是如此,所以此代码会报错:func test(i: Int) -> Int

解决办法:

func incrementor(var i: Int) -> Int {
return ++i
}
print("计算后的结果为:\(incrementor(7))")

输出结果:计算后的结果为:8

// 柯里化及多元组综合使用, inout 修饰符曾在多元组中使用
func makeIncrementor(addNumber: Int) -> ((inout Int) -> ()) {
func incrementor(inout variable: Int) -> () {
variable += addNumber;
print(variable);
}
return incrementor;
}
var i = ;
let addMethod = makeIncrementor()
addMethod(&i)
addMethod(&i)
addMethod(&i)
addMethod(&i)

最新文章

  1. head/tail实现
  2. iOS中如何知道app版本已更新
  3. WebForm 简单控件、复合控件
  4. Redis配制说明
  5. Android(java)学习笔记139:在TextView组件中利用Html插入文字或图片
  6. 从U盘安装win8系统
  7. Hadoop学习之Hadoop集群搭建
  8. 从jdbc到mybatis
  9. 【5】图解HTTP 笔记
  10. [算法题] Remove Duplicates from Sorted Array
  11. 使用gogs搭建git私有仓库
  12. chrome官方完整安装包
  13. vue初始化项目,构建vuex的后台管理项目架子
  14. rank() partition by 排名次
  15. APP 后台学习笔记
  16. Android 中使用 dlib+opencv 实现动态人脸检测
  17. jquery hover事件只触发一次动画
  18. [leetcode]40. Combination Sum II组合之和之二
  19. kubelet 初始化过程
  20. 『MXNet』im2rec脚本使用以及数据读取

热门文章

  1. MyBatis知多少(21)更新操作
  2. 表格CSS样式美化
  3. 《javascript模式》 容易踩中的那些坑
  4. AngularJS 监控对象属性:$watch和$digest
  5. Office Web Apps Server 概述
  6. ASP.NET MVC 使用 IOC框架 AutoFac 自动释放数据库资源
  7. 说说jsonp
  8. sprint演示Scrum 项目7.0
  9. C# winform调用浏览器打开页面方法分享,希望对大家有帮助
  10. strtr对用户输入的敏感词汇进行过滤