编译&架构
文档注释
可参考:https://swift.org/documentation/api-design-guidelines/
/// 求和 【概述】
///
/// 将两个整数相加 【详细的描述】
///
/// - Parameter v1: 整数1
/// - Parameter v2: 整数2
///
/// - Note: 传入两个整数即可 【批注】
///
func sum(v1:Int,v2:Int) -> Int {
return v1 + v2
}
常见数据类型
新增:Tuple元祖
let httpStatus = (statusCode:200,result:”正常”)
let httpError = (404,”Not Found”)
流程控制
闭区间运算符
**for** i **in** 0...3{<br /> print(i)<br /> }_//1 2 3_
半开区间
**for** i **in** 0..<3{<br /> print(i)<br /> }_// 1 2_<br /> **let** range = "a"..."g"<br /> range.contains("g") _//true_<br /> **let** range2 = "a"..<"g"<br /> range2.contains("g") _//false_
囊括所有可能要用到的ASCII字符
**let** allCharacter : ClosedRange<Character> = "\0"..."~"
间隔区间
for t in stride(from: 1, to: 5, by: 2){
print(t)
} //1 3
for t in stride(from: 1, through: 5, by: 2){
print(t)
} //1 3 5
Switch
1.区间匹配
let score = 88
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("一般般")
case 80..<90:
print("优秀")
case 90...100:
print("无得弹")
default:
print("作弊")
} //优秀
2.元祖匹配
let tt = (10,"ok")
switch tt {
case (3,"ok"):
print("第一项")
case (1..<10,_):
print("第二项")
case (let a,"ko")where a>5:
print("第三项\(b)")
case (5...10,let b):
print("第四项\(b)")
default:
print("其他")
}//第四项ok
注意事项:
- case、default 后面不能写大括号{}
- 默认不用写 break,不会贯穿到后面条件
- 想贯穿可以使用 fallthrough
- switch 必须要保证涵盖所有情况, 可以不使用default
- case、default 后面至少要有一条语句,如果没有请添加 break
- 可以使用下划线 _ 来忽略某个值,也可以值绑定到一个变量或常量
Where
条件判断,使用得妙可以简化很多代码
可变的参数
func arrSum (objs numbers: Int...)->Int{
var temp = 0
for obj in numbers {
temp += obj
}
return temp
}
arrSum(objs: 10,20,30) //60
内联函数 Inline Function
typealias 给类型起别名
typealias newName = Int32
typealias Date = (year:Int,month:Int,day:Int)
Void其实就是空元祖
public typealias Void = ()
枚举Enum
关联值Associated Values
原始值Raw values
- 原始值不占用枚举变量的内存
可选项optional
- 可选项,又叫可选类型,它允许将值设置为nil
- 在类型名称后面加 ? 来定义可选项
- 不能对值为 nil 的可选项(空盒子) 强制解包
可选项绑定
空合并运算符 ??
// a 不为nil ,a的问号数少于b,直接用b的问号数
// a 不为nil ,a的问号数多于b,直接用a的问号数-1
// a 不为nil ,a的问号数等于b,直接用任意一方的问号数
// a 为nil ,a的问号数多于或等于b,直接用b的问号数
// a 为nil ,a的问号数少于b,直接用b的问号数-a的问号数,包nil
多重可选项
结构体struct &类class
自动初始化
等同于
- 结构差不多,但初始化有很大区别,编译器并没有为 类 自动生成可以传入成员值的初始化器
- 结构体是值类型(枚举也是),类是引用类型(指针类型)
赋值拷贝
枚举,结构体,类都可以定义方法
- 方法不占用对象内存空间
- 方法的本质是函数,方法与函数都是存放在代码段