if-else
let age:Int = 4
if age >= 22{
print ("Get married")
}else if age >= 18{
print ("being a adult")
} else if age >= 7{
print ("go to school")
} else {
print("Just a child")
}
- if 后面的条件可以活力小括号
- 条件后面的大括号不可以省略
- if 后面的条件只能是
Bool
类型,而不可以是整数等类型
while
Swift里加了一个 repeat while,相当于C语言中的do while
var num = -1
repeat {
print ("num is \(num)")
} while num > 0
- 从 Swfit 3开始,去除了自增、自减运算符
for
- 闭区间运算符:a...b,a <= 取值 <= b
let range = 0...3
let arr = ["lilei","xiaohong", "ceshi", "cdkdk"]
for i in range{
print arr[i]
}
for i in 0...3 {
print arr[0]
}
for name in arr[0...3] {
print (name)
}
在以上的代码中,i
默认是常量,如果要修改 i
的值,把它声明为变量即可
for var i in 0...3 {
i += 5
print (i)
}
- 半开区间运算符:a..< b,a <= 取值 < b
- 单侧区间:让区间朝一个方向尽可能地远
for name in names[...3] {
print name
}
for name in names[0...] {
print name
}
switch
var number = 1
switch number{
case 1:
print("number is i")
break
default:
print("other")
}
-
case
、default
后面不能写大括号 - 默认可以不写
break
,并不会贯穿到后面的条件 - 如果希望继续执行下面的结果,
break
改成fallthrough
即可 -
switch
必须要保证能处理所有的情况 -
case
、default
后面至少要有一条语句 - 如果不想做任何事,加个
break
即可 - 另外switch语句还支持复合条件,也支持
Character
和String
类型
如下所示,这两种写法的结果是一样的
let string = "Jack"
switch string{
case "Jack":
fallthrough
case "Rose":
print ("person")
default:
break
}
switch string{
case "Jack", "Rose":
print ("person")
default:
break
}
区间匹配、元组匹配
let count = 62
switch count{
case 0:
print ("none")
case 1..<5:
print ("a few")
case 5..<12:
print ("several")
default:
print ("many")
}
并且支持用下划线_ 来忽略某个值
以下这段代码为判断某个点在什么地方
let point = (1, 1)
switch point{
case (0,0):
print ("the origin")
case (_, 0):
print ("x-axis")
case (0, _):
print ("y-axis")
default:
print("outside")
}
值绑定
let point2 = (2, 0)
switch point2{
case (let x, 0):
print ("on the x-axis with an value of \(x)")
case (0, let y):
print ("on the y-axis with a value of \(y)")
case (let x,let y):
print ("some where else at \(x) , \(y)")
}
switch 语句中 where 的用法
let point3 = (1, -1)
switch point3{
case let (x,y) where x == y:
print ("on the line x == y")
case let (x,y) where x == -y:
print ("on the line x == -y")
case let (x,y):
print ("\(x) , \(y) is just ")
}
将所有正数加起来
var numbers:Array = [10,30, -12, -56, 23]
var sum = 0
for num in numbers where num >= 0{
sum += num
}
print (sum)
标签语句
outer : for i in 1...4{
for k in 1...4{
if k == 3{
continue outer
}
if i == 3{
break outer
}
print ("i == \(i), k == \(k)")
}
}
函数的定义
func pi() -> Double {
return 3.14
}
func sum (v1: Int, v2 : Int) -> Int {
return v1 + v2
}
var v3:Int = sum(v1:10, v2 : 34)
print (v3)
注意:形参默认为 let
,也只能是 let
以下三种无返回值的写法是一样的
func func1() -> Void{
}
func func2 -> (){
}
func func3(){
}
返回元组:实现多返回值
func calculate (v1: Int , v2: Int) -> (sum:Int, difference: Int, average:Int){
let sum = v1 + v2
return (sum, v1 - v2, sum >> 1)
}
let result = calculate(v1:20, v2:80)
result.sum
result.difference
result.average
函数的文档注释
/// 求和【概述】
///
/// 将2个整数相加【更详细的描述】
///
/// - Parameter v1 :第1个整数
/// - Parameter v2 :第2个整数
/// - Returns : 2个整数的和
///
/// - Note:传入2个整数即可【批注】
///
func sum3(v1:Int, v2:Int) -> Int{
return v1 + v2
}
呈现的效果如下图所示
![](https://img.haomeiwen.com/i1419593/8a600249be8c1732.png)
详细的注释规范请参考:https://swift.org/documentation/api-design-guidelines/
默认参数值
func check(name:String = "nobody", age:Int, job:String = "none"){
print ("name = \(name), age = \(age), job = \(job)")
}
check (name:"Jack", age:14, job:"Doctor")
check (name:"Jack", age:20)
check ( age:14, job:"Doctor")
可变参数值
func sum4(_ numbers: Int...) -> Int {
var total = 0
for num in numbers{
total += num
}
return total
}
var total = sum4(10,290,34,20)
print(total)
- 一个函数最多只能有1个可变参数
- 紧跟在可变参数后面的参数不能省略参数标签
输入输出参数 (in-out Parameter)
- 可以用
inout
定义一个输入输出参数,可以在函数内部修改外部实参的值
var numb = 10
func add(number: inout Int){
number = 20
}
add(&numb)
print(numb)
- 可变参数不能标记为
inout
-
inout
参数不能有默认值 -
inout
参数的本质是地址传递(引用传递) -
inout
参数只能传入可以被多次赋值的
函数重载(Function Overload)
- 规则
- 函数名相同
- 参数个数不同 || 参数类型不同 || 参数标签不同
如下图所示:
func sum (v1: Int , v2: Int) -> Int {
return v1 + v2
}
func sum (v1: Int , v2: Int, v3: Int) -> Int {
return v1 + v2 + v3
}
内联函数
- 如果开启了编译器优化(Release模式默认会开启优化),编译器会自动将某些函数变成内联函数
- 将函数调用展开成函数体
![](https://img.haomeiwen.com/i1419593/b33ecc855546fe8e.png)
- 哪些函数不会被内联
- 函数体比较长
- 包含递归调用
- 包含动态派发
函数类型
- 每一个函数都是有类型的,函数类型由
形式参数类型
、返回值类型
组成
func test() {}
func sum (a:Int, b: Int) -> Int {
a + b
}
函数类型作为函数返回值
- 返回值是函数类型的函数,叫做
高阶函数
嵌套函数
- 将函数定义在函数内部
func forward (_ forward : Bool) -> (Int) -> Int {
func next (_ input : Int) -> Int {
input + 1
}
}
网友评论