标签:
函数:
没有参数没有返回值
func say() -> Void {
print("hello")
}
say()
func say1() -> () {
print("hello")
}
say1()
// 推荐
func say2() {
print("hello")
}
say2()
有参数没有返回值
内部/外部参数
// Swift2.0之前, 默认是不会将第二个参数开始的参数名称作为外部参数的, 必须自己手动指定
func sum(i: Int, j: Int) {
print(i + j)
}
sum(10, j: 20)
func sum1(first i: Int, second j: Int) {
print(i + j)
}
sum1(first: 10, second: 20)
默认参数(Default Parameter Values)
注意
func sum2(i: Int, j: Int = 10) {
print(i + j)
}
//sum2(10, j: 20)
sum2(10)
// 不推荐这样写, 最好将默认参数写在最后
func sum3(i: Int = 20, j: Int) {
print(i + j)
}
常量参数和变量参数(Constant and Variable Parameters)
注意
func sum4(let i: Int, let j: Int) {
print(i + j)
}
sum4(10, j: 20)
var num1 = 10
var num2 = 20
//func swap(value1: Int, value2: Int){
// let temp = value1
// value1 = value2
// value2 = temp
//}
// 注意: 操作的是局部变量, 对实参没有影响
func swap1(var value1: Int, var value2: Int){
print("交互前: value1 = \(value1), value2 = \(value2)")
let temp = value1
value1 = value2
value2 = temp
print("交互后: value1 = \(value1), value2 = \(value2)")
}
swap1(num1, value2: num2)
print(num1)
print(num2)
输入输出参数(In-Out Parameters)
注意
func swap2(inout value1: Int, inout value2: Int){
print("交互前: value1 = \(value1), value2 = \(value2)")
let temp = value1
value1 = value2
value2 = temp
print("交互后: value1 = \(value1), value2 = \(value2)")
}
swap2(&num1, value2: &num2)
print(num1)
print(num2)
可变参数(Variadic Parameters)
注意
func sum5(numbers: Int...) {
// print(numbers)
var sum = 0
for number in numbers {
sum += number
}
print(sum)
}
sum5(1, 2, 3)
// 不推荐写法, 和默认值一样, 变参最好写在最后
func sum6(numbers: Int..., var sum: Int) {
// print(numbers)
for number in numbers {
sum += number
}
print(sum)
}
sum6(1, 2, 3, sum: 0)
// 推荐写法
func sum7(var sum: Int = 100, numbers: Int...) {
// print(numbers)
for number in numbers {
sum += number
}
print(sum)
}
sum7(numbers: 1, 2, 3)
// 一个函数中只能有一个变参
//func sum8(numbers: Int..., values: Int...){
// print(numbers)
// print(values)
//}
// 有参数有返回值
func sum8(i: Int, j: Int) -> Int {
return i + j
}
let result = sum8(10, j: 20)
print(result)
闭包
{
(形参列表) -> 返回值类型
in
执行语句
}
// 正常写法
loadData ({ () -> () in
print("执行了")
})
*/
/*
// 闭包的其它写法
// 1.如果闭包是函数的最后一个参数, 那么可以把闭包写在调用函数的()后面
// 这种写法, 我们称之为 "尾随闭包"
loadData("123") {
() -> ()
in
print("执行了")
}
// 2.如果函数只接收一个参数, 并且这个参数是闭包, 那么调用函数的()可以省略
// 这种写法, 我们称之为 "尾随闭包"
loadData {
() -> ()
in
print("执行了")
}
func loadData(since_id: String, finished: ()->()) -> Void {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("子线程做耗时操作 \(NSThread.currentThread())")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("主线程更新UI \(NSThread.currentThread())")
finished()
})
}
}
/*
func loadData(finished: ()->()) -> Void {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("子线程做耗时操作 \(NSThread.currentThread())")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("主线程更新UI \(NSThread.currentThread())")
finished()
})
}
}
block
OC中如何解决循环引用
Swift中如何解决循环引用
所以被weak修饰的变量是可选类型
unowned var weakSelf = self
所以被unowned修饰的变量, 不是可选类型
注意: weak和unowned只能修饰对象类型, 因为只有对象类型才有引用计数
应用场景:
捕获列表
调用
闭包时在形参列表前面通过[]指定捕获列表, 告诉系统如何处理指定的这些值 //weak var weakSelf = self
//unowned var weakSelf = self
callBack = { [unowned self ,weak btn = self.button] () -> () in
//self.view.backgroundColor = UIColor.redColor()
//weakSelf.view.backgroundColor = UIColor.redColor()
self.view.backgroundColor = UIColor.redColor()
print(btn)
}
loadData(callBack!)
}
func loadData(finished: ()->()) -> Void {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("子线程做耗时操作 \(NSThread.currentThread())")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("主线程更新UI \(NSThread.currentThread())")
finished()
})
}
}
例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,你可能需要在类实例被释放之前手动去关闭该文件
deinit {
print("88")
}
标签:
原文地址:http://www.cnblogs.com/l110/p/5143856.html