Swift学习之闭包

作者: 巧克力的qiao | 来源:发表于2016-03-01 18:41 被阅读44次

swift中闭包类似于oc中的Block语句块

一、一个最简单的闭包实现

🌰1

let test = { ()->void in
    print("这是一个闭包")
}

闭包就是写好的一段代码,然后在某一处调用,其调用方法跟oc中调用block一样

  test()      //闭包调用  打印出 这是一个闭包

👆()中是参数的传入口,void表示返回值为空 in是分隔闭包的声明部分和实现部分,即是区分()->voidprint("这是一个闭包")这两个部分

如果参数和返回值都为空的话🌰1也可以写成👇的形式

let test = { 
    print("这是一个闭包")
}

二、带有参数和返回值的闭包

🌰2

let demo = { (num1 x:Int,num2 y:Int)-> Int in
    return x+y
}

let sum = demo(num1: 10, num2: 20)
print(sum)
//输出结果为30

👆这段闭包有参数名和返回值,其功能与函数相同,那么如果我们用函数来实现的话,应该如何书写呢?

func demo (num1 x:Int ,num2 y:Int)->Int{
        return x+y
}

let demoFunc = demo
    
let sum = demoFunc(num1: 30, num2: 50)
    
print(sum)
//输出结果为80

对比一下闭包和函数的书写格式可以出闭包的特点在于in的使用,其他基本相似

闭包的补充

声明一个闭包

var demo:((num1:Int ,num2:Int)->Int)
//将闭包功能实现
demo={(num1:Int,num2:Int)->Int in
        return num1+num2
}

另一种写法,不用声明参数类型

demo = {(num1,num2)->Int in 
     return num1+num2
}

第三种写法

demo = {
return $0+$1
}
//其中$0表示第一个参数,$1表示第二个参数

第四种写法

demo = {
    $0+$1
}

这三种返回值都是一样的

三、闭包与函数的结合使用(实例演练)

实现如下功能,在scrollView中添加多个label

Simulator Screen Shot 2016年3月1日 下午6.22.40.png 屏幕快照 2016-03-01 下午6.25.12.png

代码如下

override func viewDidLoad() {
        super.viewDidLoad()
        let frame = CGRect(x: 0, y: 20, width: view.bounds.width, height: 44)
        let sv = scrollView(frame, num: { () -> Int in
            return 16
            }) { (index) -> UILabel in
                let lab = UILabel()
                lab.text = "lable\(index)"
                lab.font = UIFont.systemFontOfSize(18)
                lab.sizeToFit()
                
                lab.font = UIFont.systemFontOfSize(14)
                return lab
        }
    
    view.addSubview(sv)
}
func scrollView(frame: CGRect,num :()->Int ,lab: (index: Int)->UILabel)->UIScrollView{
    
    //1.实例化scrollView
    let sv = UIScrollView()
    sv.frame = frame
    sv.backgroundColor = UIColor.grayColor()
    
    //2.确定lable有几个
    let num = num()
    
    //3.创建lable
    let margin:CGFloat = 8.0
    var x = margin
    for i in 0..<num{
        
        let lab = lab(index: i)
        lab.frame = CGRect(x: x, y: 10, width: lab.bounds.width, height: lab.bounds.height)
        sv.addSubview(lab)
        x+=lab.bounds.width
    }
   sv.contentSize = CGSize(width: x, height: 0)
    //4.返回scrollView
    
    return sv
}

仔细阅读会发现,若是不考虑label重用的话,其实现原理与UITableView的代理方法是一样的,即告诉我有几个label,返回几个label实例,添加到scrollview中。

相关文章

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • swift学习之闭包

    闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 ...

  • swift学习之闭包

    闭包和oc中的block非常相似,OC中的block非常像匿名的函数,闭包是用来定义函数(方法的)。作用: blo...

  • swift学习之闭包

    基本概念 闭包类似于oc中的block,用于保存一段代码,在需要的时候执行闭包是引用类型 尾随闭包 闭包作为函数的...

  • Swift学习之闭包

    swift中闭包类似于oc中的Block语句块 一、一个最简单的闭包实现 ?1 闭包就是写好的一段代码,然后在某一...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

网友评论

    本文标题:Swift学习之闭包

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