Swift4 函数, 元组, 运算符
创建: 2018/02/19
完成: 2018/02/19
更新: 2018/02/25 修改标题 [Swift4 函数] -> [Swift4 函数, 元组, 运算符]
更新 :2018/03/30 补充不带参数的函数声明的例
【任务表】TODO
| 函数定义的基础 | ||||||||||||||||||||||||||||||||||||||||
| 函数定义的概要 |
简单的声明方法 func 函数名 (参数: 类型) -> 型 { //参数可多个,也可省略。返回类型可省略
函数内部也可以定义函数 |
|||||||||||||||||||||||||||||||||||||||
| 带标签 |
参数名是默认标签,要自定义就在前面加 func 函数名(标签名 变量名:型) -> 型 {
● 哪怕函数名相同, 标签名不同,函数也就不同 ● 标签名可以重复 func sample() {} // 不带参数, 不带返回值。 不带参数也不能省略()
func sample(a a1: Int, b a2: Int) -> Bool {} //例
func sample(AAAAA a1: Int, b a2: Int) -> Bool {} //标签不同,和上一个不是一个函数
func sample(X a1: Int, X a2: Int) -> Bool {} //标签可以相同
func sample(_ a1: Int, _ a2: Int) -> Bool {} // 呼出时省略标签
|
|||||||||||||||||||||||||||||||||||||||
| 内部完全不用的参数 |
func sample(target: Int, _: Bool) -> Bool {} // 完全不用的参数名就_
注: ● 参数名_和标签名_的区别 func test(a: Int, _:Bool) {} func test(aa: Int, _ a: Bool) {} 呼出时: 参数名_的 test(a: Int, Bool) 标签名_的 test(aa: Int, a: Bool) |
|||||||||||||||||||||||||||||||||||||||
| 通配符_ |
● 不用声明,能和一切配合 ● 表示没有值, 无视 _ = // 代入例
for _ in ..< {} //循环例
|
|||||||||||||||||||||||||||||||||||||||
| 函数定义的选项 | ||||||||||||||||||||||||||||||||||||||||
|
改变参数 (相当于C的指针) |
func 函数名(sample: inout 类型) -> 类型 {}
● 型前面加上inout 呼出 sample(sample: &) |
|||||||||||||||||||||||||||||||||||||||
| 设定默认值 |
不能既有默认值又是inout func sample(target t: Int = ) {} // 型后面 = 值
● 设定默认值参数的右边的没默认值的参数都设定标签,不设定不能省略有默认值的 ● 呼出时参数按顺序写 |
|||||||||||||||||||||||||||||||||||||||
| 无法改变传入的值 |
参数的值不能被改变(改变报错), 要改变,定义同名量 func sample(a: Int) {
|
|||||||||||||||||||||||||||||||||||||||
| 允许不用返回值 |
@discardableResult @discardableResult |
|||||||||||||||||||||||||||||||||||||||
| 嵌套函数 |
函数内部也可以有函数 ● 最外側函数不用考虑先后 ● 内部的函数有先后 |
|||||||||||||||||||||||||||||||||||||||
| 重载(overload) | ||||||||||||||||||||||||||||||||||||||||
| 重载 |
同一个函数名,参数的类型或者数量或者标签不同或者返回类型不同就是重载 ● 参数的数量 ● 标签不同 ● 参数的类型, 最外部可以。内部的嵌套函数不能只有此处不同 ● 返回类型不同, 最外部可以。内部的嵌套函数不能只有此处不同 |
|||||||||||||||||||||||||||||||||||||||
| 函数的文档表达方式 |
函数名(标签:) 例 sample(a:b:c) // func sample(a: Int, b: Double, c: Bool) |
|||||||||||||||||||||||||||||||||||||||
| 元组(tuple) | ||||||||||||||||||||||||||||||||||||||||
| 元组 |
● 多个数据的组合 ● 不能添加属性和方法 ● 多用在函数返回值 ● 不应该用元组为基础去生成复杂的数据结构,用结构体和类 var 变量: (类型, 类型, ...) 例 var sample : (String, Int) = ("sample", )
获取内部元素, .0, .1, ... sample. // "sample" |
|||||||||||||||||||||||||||||||||||||||
| 代入 |
● 代入时候必须型相同 ● 可以用元组一次代入多个 let info = (, , ) |
|||||||||||||||||||||||||||||||||||||||
| 返回元组 |
func sample() -> (Double, Double) {}
● 一个元素的元组自动看做元素本身 ● 没有元素的元组()别名Void ● 返回值永远是元组 ● 可以有标签 func sample() -> (fst: Double, snd: Double) {}
|
|||||||||||||||||||||||||||||||||||||||
| 带标签的元组 |
(标签: 类型, 标签: 类型) 例 var sample: (fst: Int, snd: Int) = (fst: , snd: ) ● 只有一部分有标签也可以 |
|||||||||||||||||||||||||||||||||||||||
| 带标签的元组的代入 |
● 只能和相同标签的元组或者没有标签的元组相互代入 ● 标签顺序变化也没事 ● 标签不同的类转换以后可以代入 式 as 型 |
|||||||||||||||||||||||||||||||||||||||
| 元组的比较 |
● 限制: 同型,无视标签,最多6个元素,元素不能有元组, 元素必须可以进行大小比较(Bool无法比大小) ● 按第一个第二个...的顺序比较 |
|||||||||||||||||||||||||||||||||||||||
| Swift的运算符 | ||||||||||||||||||||||||||||||||||||||||
| 运算符的优先级 |
后置运算符>前置运算符>二项运算符 二项运算符的优先度: 由高到低从上往下
|
|||||||||||||||||||||||||||||||||||||||
| 除余 |
a%b = c c的符号总是和a一致 |
|||||||||||||||||||||||||||||||||||||||
| 比特运算符和移位运算符 |
● 比特运算符和C规则一样: &, &=, |, |=, ^, ^= ● 移位运算符也和C规则一样, >>, >>=, <<, <<= ● 安全的移位运算符(masking shift, 不会超出范围) &<<, &<<=, &>>, &>>= |
|||||||||||||||||||||||||||||||||||||||
| 溢出运算符 |
&+, &-, &* 超出取值范围或者低于取值范围自动转换,不报错 |
|||||||||||||||||||||||||||||||||||||||
| # TODO: Supply [补充nill, as/as?/as!, is, ===, !==, ~= p59] | ||||||||||||||||||||||||||||||||||||||||
| 运算符的定义 | ||||||||||||||||||||||||||||||||||||||||
| 运算符的声明 |
分类 ● (1)定义全新的运算符 ● (2)已有的运算符添加新的用法 (a)单项运算符定义二项,或者相反 (b)现有运算符运用于新型上 (1), (2)(a)的情况需要声明运算符(最外侧,位置任意) // 二项运算符 ● 不指定优先群的默认DefaultPrecedence(只是比三项运算符高, 连续用要自己用括号) ● 一旦定义了就不能改变优先度和结合法则 |
|||||||||||||||||||||||||||||||||||||||
| 可以作为运算符的字符串 |
可用的字符, 一个或多个组合成新的运算符 / = - + ! * % < > & | ^ ~ ? 不能用的组合
|
|||||||||||||||||||||||||||||||||||||||
| 二项运算符的定义 |
infix operator 运算符 ( : 优先群) // 把指定符号作为二项运算符的声明 例 infix operator <|<| // 二项运算符, 右边的数字添加到左侧的字符串上 ● 运算符的定义函数参数不能有标签 |
|||||||||||||||||||||||||||||||||||||||
| 单向运算符的定义 |
prefix/postfix operator 运算符 // 单项运算符的声明 例 prefix operator ^| // 前置运算符, 把数字转换成字符串 |
|||||||||||||||||||||||||||||||||||||||
| 改变参数 | 需要改变的地方的类型加上inout | |||||||||||||||||||||||||||||||||||||||
| 自定义优先群 |
写在最顶层 precedencegroup 优先群名 {
# TODO: Supply [补充assignment意义, 可选链相关] # TODO: Supply [补充assignment默认值] |
|||||||||||||||||||||||||||||||||||||||
Swift4 函数, 元组, 运算符的更多相关文章
- C++学习27 用全局函数重载运算符
运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以 ...
- c# Equal函数 and 运算符'==' (原发布 csdn 2017年10月15日 20:39:26)
1.==.!=.<.>.<= 和>= 运算符为比较运算符(comparison operator).C#语言规范5.0中文版中比较运算符的描述如下: 2.通用类型系统 3.值类 ...
- Python元组运算符
Python元组运算符: len(元组名): 返回元组对象的长度 # len(元组名): # 返回元组对象的长度 tuple_1 = (1,4,5,2,3,6) print(len(tuple_1)) ...
- JavaScript基础一(js基础函数与运算符)
[使用js的三种方式] 1.在HTML标签中,直接内嵌js(并不提倡使用) <button onclick=" alert('点就点')"> 点我啊</butto ...
- MySQL 聚合函数、运算符操作、约束、表的复制
1.聚合函数 1.分类 avg(字段名) : 求该字段平均值 sum(字段名) : 求和 max(字段名) : 最大值 min(字段名) : 最小值 count(字段名) : 统计该字段记录的个数2. ...
- scla-基础-函数-元组(0)
//元组 class Demo2 extends TestCase { def test_create_^^(){ val yuana = (1,true,1.2,"c",&quo ...
- vector at()函数比 []运算符操作安全
转载:https://blog.csdn.net/chenjiayi_yun/article/details/18507659 []操作符的源码 reference operator[](size_t ...
- 在create-react-app创建的项目下允许函数绑定运算符
前话 React的函数绑定一致是个问题,主要有下面几种方式: 事件处理器动态绑定 export default class Com extends React.Component { render() ...
- c++语言友元函数和成员函数对运算符重载
#include<iostream> using namespace std; /******************************************/ /*use mem ...
随机推荐
- 简述WEB项目前端脚本的一次重构历程,labJs,requireJs实践[转载]
重构前的状态: 大量的js代码混在繁多的Jsp文件中,对第三方的js库依赖也很杂乱.虽然在部分交互性较强的页面中,将js代码分离到了独立的js文件中,但是代码结构及依赖管理依然很乱.不说新人来了 ...
- linux 开机启动脚本或者服务
https://blog.csdn.net/zhuchunyan_aijia/article/details/53811368
- Spring AOP Capability and Goal
AOP Capability: 1.Spring声明式事务管理配置. 2.Controller层的参数校验. 3.使用Spring AOP实现MySQL数据库读写分离案例分析 4.在执行方法前,判断是 ...
- eclipse需要的环境变量就两个,一个是java_home指向JDK。另一个是Tomcat,自己去preference-sever下new一个
1.eclipse需要的环境变量就两个,一个是java_home指向JDK.另一个是Tomcat,自己去preference-sever下new一个
- JAVA原始的导出excel文件,快捷通用 方便 还能够导出word文档哦
如今导出excel基本上都是用poi了,当报表格式非常负责的时候 开发难度会加大 假设报表有格式有变化 那就更复杂了,先发现一个非常老的技术.能够解决格式复杂的报表. 实例代码例如以下: <%@ ...
- 【转】Wireshark技巧-过滤规则和显示规则
原文: http://www.cnblogs.com/icez/p/3973873.html ----------------------------------------------------- ...
- linux上安装启动elasticsearch-5.5.1完整步骤
linux上安装启动elasticsearch-5.5.1完整步骤 学习了:https://blog.csdn.net/hingcheung/article/details/77144574 http ...
- 碰撞检測之Sphere-Box检測
检測思路 首先要做的是将Box转为AABB,然后推断圆心是否在Box内.用的就是之前的SAT 假设圆心在Box内,肯定相交, 假设不在圆心内.则有四种情况,与顶点相交,与楞相交,与面相交,这里的确定也 ...
- awk基本使用方法简单介绍
之前说过sed, 今天来说awk, 它也是一个文本处理器. 是linux下的一个命令, 比sed更强大. 搞linux开发, 尤其是后台开发, 这个命令差点儿必需要用到. awk这三个字母分别代表其三 ...
- REST技术第四步 多个參数注解问题
经过实验,发如今使用@BeanParam注解的查询类字段上. @FormParam和@QueryParam不能同一时候加上去,仅仅能加一个,否则会出现取不到数据的情况. 并且在方法參数上两个注解也不能 ...