Swift函数
外部参数名
局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数。
func pow(firstArg a: Int, secondArg b: Int) -> Int {
var res = a //内部参数
return res
}
pow(firstArg:5, secondArg:3)
可变参数
可变参数通过在变量类型名后面加入(...)的方式来定义。
func vari<N>(members: N...){
for i in members {
print(i)
}
}
vari(members: 4,3,5)
vari(members: 4.5, 3.1, 5.6)
Swift 闭包 = {}
let studname = { print("Swift 闭包实例。") }
全局函数和嵌套函数其实就是特殊的闭包。
全局函数:有名字但不能捕获任何值。
嵌套函数:有名字,也能捕获封闭函数内的值。
闭包表达式:无名闭包,使用轻量级语法,可以根据上下文环境捕获值。
Swift中的闭包有很多优化的地方:
根据上下文推断参数和返回值类型
从单行表达式闭包中隐式返回(也就是闭包体只有一行代码,可以省略return)
可以使用简化参数名,如$0, $1(从0开始,表示第i个参数...)
提供了尾随闭包语法(Trailing closure syntax)
参数名称缩写 { in }
$0 ,$1
尾随闭包
尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。
//定义
func someFunctionThatTakesAClosure(closure: () -> Void) {
// 函数体部分
}
// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure({
// 闭包主体部分
})
// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() {
// 闭包主体部分
}
捕获值
常量和变量的原域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。
Swift 枚举
1. 原始值 枚举事例的原始值:rawValue
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
let earthsOrder = Planet.earth.rawValue // 3
2. 关联值
enum Student{
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Runoob")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("学生的名字是: (studName)。")
case .Mark(let Mark1, let Mark2, let Mark3):
print("学生的成绩是: (Mark1),(Mark2),(Mark3)。")
}
重写(Overriding)
- 重写函数 override func show() {}
- 重写属性
// 继承超类 Circle
class Rectangle: Circle {
var print = 7
override var area: String {
return super.area + " ,但现在被重写为 (print)"
}
}
防止重写(final)