一、swift函数
1.一个特别简单的函数实现连个数的相加
func sum (int : x, int : y)-> Int{
return x+y
}
*sum 是函数名
*sum后的括号中是形参列表,格式为 变量名 : 类型,多个变量名之前使用“,”隔开
*箭头后是返回值类型
2.关于函数外部参数
sum1(num1 x:Int,num2 y:Int) -> Int {
return x+y;
}
*外部参数,就是在形参前加一个参数,不影响形参使用,外部调用会显示出来
*外部参数如果是“_”,会省略形参的名字
*在swift中“_”表示可以忽略任何不感兴趣的内容 形参,不关心的变量
同下:
funcsum2(_x:Int,_y:Int) ->Int{
returnx+y;
}
3.设置函数默认值
funcsum3(x:Int=1, y:Int=2) ->Int{
returnx + y
}
通过给参数设置默认值,可以任意组合参数,如果不指定,就使用默认值,OC中没有这个功能
4.无返回值的三种写法
func demo1() {
print("无返回值demo1") //直接省略返回值
}
func demo2() -> () {
print("无返回值demo2") //空括号的返回值
}
func demo3() -> Void {
print("无返回值demo3") //void的返回值
}
这三种方式是一样的,在swift中”->“表示前面是执行后面是返回目标
二、swift闭包
闭包类似于OC中的block,同block一样,常用于回调
1.异步回调
2.控制器回调
3.自定义视图回调
*定义无参数无返回值的闭包
let bag1 = {
print("hellow")
}
*执行闭包
bag1()
*有参数无返回值的闭包
let bag2 = { (x : Int)->() in
print(x)
}
bag2(10)
*有参数有返回值的闭包
let b3 = { (x:Int)-> Int in
return x * x
}
print(b3(5))
*无参有返
let b4 = { ()->String in
return "你好"
}
let result = b4()
print(result)
关于闭包:
关键字 in 分割定义和实现
格式:
变量名 = { (参数列表以“,”分割)->返回值类型 in
此处是实现
}
*关于尾随闭包
尾随闭包:如果函数的最后一个参数是闭包,函数的参数可以提前结束,最后一个参数直接使用{}包装的代码
我们写一个最后一个参数是闭包的函数:
func loadData(complitation : @escaping (_ result: [String])->()) { DispatchQueue.global().async {
Thread.sleep(forTimeInterval: 1)
let json = ["","八卦","出大事"]
DispatchQueue.main.async { }
complitation(json)
} }
我们来调用的时候:可以直接结束
loadData{ (result) in
print(result)
}
关于花括号,与OC不一样的是,OC表示执行一段代码,而swift表示尾随闭包,不能像OC那样写,但是我们可以加do,表示执行
注:关于闭包的循环引用
这里大概说一下,swift中我们有三种方式解决循环引用
OC方式:
weak var weakself =self
loadDemo{
print(weakself?.view??"释放")
}
swift方式:
loadDemo2{ [weak self] in
print(self?.view)//[weak self]表示{}中所有的self都是弱引用,需要注意要解包
}
loadDemo2{ [unowned self]in
print(self.view)//[unowned self] 表示闭包内所有的self都是assign,不会是强引用,但是如果对象释放,指针地址不会变化,有可能会蹦,会出现野指针的问题
}
网友评论