文档章节

Swift -- 闭包

上官尘
 上官尘
发布于 2016/02/27 00:46
字数 418
阅读 47
收藏 0

一:闭包的表达式

//闭包就是函数,是一种有特定格式的函数。常用于保存一段代码,用作回调,处理耗时操作等等
//闭包格式如下
//{ (参数) -> 返回值类型 in 执行的语句 }
//in是用来区分形参,返回值和执行代码

//调用函数
myname("sgc") { () -> () in
            print("执行回调")
        }
//也可以这样调用
myname("sgc",{ () -> () in
            print("执行回调")
        })
//闭包作为参数
func myname(name: String, finished: () -> ()){
        print(" my name = \(name)")//执行耗时操作
        finished()
    }
    /*闭包简写:
        1.如果没有参数, 没有返回值, in和in之前的东西可以省略
        2.如果闭包是函数的最后一个参数, 可以写在()后面  -- 尾随闭包
        3.如果只有一个闭包参数, 那么()也可以省略  -- 尾随闭包
        4.闭包写在参数列表中
        */

二:闭包返回值

 
   //调用createScrollView函数
   let sc = createScrollView({ () -> Int in
            return 15
            }) { (index) -> UILabel in
                let width = 50
                let label = UILabel()
                label.backgroundColor = UIColor.greenColor()
                label.textColor = UIColor.darkGrayColor()
                label.font = UIFont.systemFontOfSize(17)
                label.text = "text\(index)"
                label.frame = CGRect(x: index * width, y: 0, width: width, height: 44)
                return label
        }
        view.addSubview(sc)
        
    }
    
    
    
    
    
    //创建两个闭包参数,用来返回ScrollView的数量,和ScrollView上子view的类型
    func createScrollView(labelCount: ()->Int, viewWithIndex: (index:Int)->UILabel) -> UIScrollView{
        // 1.创建UIScrollView
        let sc = UIScrollView(frame: CGRect(x: 0, y: 100, width: 375, height: 44))
        
        let count = labelCount()//闭包返回的子view个数
        
        // 2.遍历创建UILabel
        for i in 0..<count{
            let label = viewWithIndex(index: i)//闭包返回的子view
            sc.addSubview(label)
            sc.contentSize = CGSize(width: CGFloat(count) * label.bounds.width, height: 44)
        }
        
        // 返回UIScrollView
        return sc
    }

三:循环引用的问题

   参照这篇文章: http://www.cocoachina.com/ios/20160224/15349.html



© 著作权归作者所有

共有 人打赏支持
上官尘
粉丝 6
博文 38
码字总数 9881
作品 0
普陀
程序员
Swift讲解专题八——闭包

Swift讲解专题八——闭包 一、引言 Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法。Swift中的闭包语法风格十分简洁,其作用和函数的作用相似。 二、从一个系统函...

珲少
2016/05/14
818
3
《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!

原创文章,欢迎转载。转载请注明:关东升的博客 我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。...

智捷课堂
2015/10/14
29
0
Swift3.0 函数闭包与 Block

最近新接手了一个Swift项目,花点时间做点小结,以做记录 我的博客链接 Swift中定义一个基本函数 这里下划线 的作用用来忽略外部參数名,具体可以参考这篇文章 带参函数定义 举栗子,网络数据...

PetitBread
2017/06/08
0
0
RxSwift之路 1#Swift语法知识准备

在开始学习 RxSwift 之前,一定要对 Swift 相关语法有所了解,否则就很难理解为什么可以这样。关于 Swift 的学习其实只要看看 Swift 的官方文档就可够了。我之前也列过一些学习资源:来自一线...

没故事的卓同学
2017/07/11
0
0
Swift 个人学习笔记 - 06: 闭包(Clousures)

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
37分钟前
0
0
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
56分钟前
0
0
c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
4
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部