美文网首页
swift之函数和闭包

swift之函数和闭包

作者: 王小妞闯天涯 | 来源:发表于2018-05-02 19:27 被阅读4次

一、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,不会是强引用,但是如果对象释放,指针地址不会变化,有可能会蹦,会出现野指针的问题

        }

相关文章

网友评论

      本文标题:swift之函数和闭包

      本文链接:https://www.haomeiwen.com/subject/xkwcrftx.html