一.Swift中闭包的简单使用

 override func viewDidLoad() {
super.viewDidLoad() /**
闭包和OC中的Block非常相似
OC中的block类似于匿名函数
闭包是用来定义函数
作用:Block是用于保存一段点,在需要的时候执行
闭包也是用于保存一段点,在需要的时候执行做一个耗时操作
*/
/**
闭包的基本格式:
{
(形参列表)->()
in
需要执行的代码
}
*/
/**
* 闭包的几种格式:
1.将闭包通过实参传递给函数
2.如果闭包是函数的最后一个参数,那么闭包可以写在函数()的后面
3.如果函数只接收一个参数,并且这个参数是闭包,那么()可以省略
*/
loadData (, finished: {() -> () in
print("被回调了")
})
loadData (){ () -> () in
print("被回调了")
}
say { () -> () in
print("hello")
}
/**
闭包的简写:
如果闭包没有参数也没有返回值,那么,in之前的东西都可以删除,包括in
*/
loadData() {
print("hahfhahf ")
}
} func say(finish: ()->())
{ } func loadData(num: Int, finished: ()->())
{
print("执行耗时操作")
//回调通知调用者
finished()
} override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//Swift中dispatch_async回调的是一个闭包
dispatch_async(dispatch_get_global_queue(, )) { () -> Void in
print(NSThread.currentThread())
print("执行耗时操作")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print(NSThread.currentThread())
print("回到主线程更新UI")
})
}
}

二.使用闭包 创建一个UIScrollView

 override func viewDidLoad() {
super.viewDidLoad()
let sc = createScrollView({ () -> Int in
return
}) { (index) -> UIView in
let width =
let btn = UIButton()
//3.设置按钮的属性
btn.backgroundColor = UIColor.greenColor()
btn.setTitle("标题\(index)", forState: UIControlState.Normal)
btn.frame = CGRect(x: index * width, y: , width: width, height: )
//4.返回建好的控件
return btn }
view.addSubview(sc)
}
//定义一个方法来创建UIScrollview,
//1.并且UIScrollview上有多少个按钮必须通过闭包告诉该方法
//2.按钮也通过闭包来创建
func createScrollView(btnCount: ()-> Int, btnWithIndex: (index:Int) ->UIView) -> UIScrollView
{
// 1.创建UIScrollview
let sc = UIScrollView(frame: CGRect(x: , y: , width: , height: ))
sc.backgroundColor = UIColor.redColor() // let width = 80
let count = btnCount()
//添加多个按钮
for i in ..<count
{
// let btn = UIButton()
// //设置按钮的属性
// btn.backgroundColor = UIColor.greenColor()
// btn.setTitle("标题\(i)", forState: UIControlState.Normal)
// btn.frame = CGRect(x: i * width, y: 0, width: width, height: 44)
// //将按钮添加
// sc.addSubview(btn)
let subView = btnWithIndex(index: i)
sc.addSubview(subView)
sc.contentSize = CGSize(width: CGFloat(count) * subView.bounds.width, height: )
} return sc
}

Swift学习--闭包的简单使用(三)的更多相关文章

  1. Swift学习--闭包中的懒加载(四)

    class ViewController: UIViewController { //格式:定义变量时前使用lazy来修饰变量,后面通过等到赋值一个闭包 // 注意点:1.必须是用var 2.闭包后面 ...

  2. 入门VMware Workstation下的Debian学习之Vim简单使用(三)

    什么是Vim? Vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计. Vim是从vi发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广 ...

  3. Swift学习之函数和简单地控件的创建

     今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的 ...

  4. Swift 学习笔记 (闭包)

    闭包是可以在你的代码中被传递和饮用的功能性独立模块.Swift中的闭包和C以及Objective-C中的Block很像,和其他语言中的匿名函数也很像. 闭包能捕获和存储定义在其上下文中的任何常量和变量 ...

  5. swift学习笔记之-闭包

    //闭包 import UIKit /*闭包(Closures): 函数.闭包.类都是引用类型(引用类型的实例赋值给变量或常量时,得到的都是该实例的引用,而值类型的实例变量得到的是独立的值的拷贝) 1 ...

  6. Swift 学习- 08 -- 闭包

    // 闭包是自包含的函数代码块, 可以在代码中被传递和使用, swift 中的闭包 与 C语言 和 OC 中的代码块 (blocks) 以及其他一些编程语言中的匿名函数比较类似 // 闭包可以捕获和存 ...

  7. 【Swift学习】Swift编程之旅---闭包(十一)

    闭包是可以在代码中被传递和使用的自包含功能模块,它很像c和oc中的block,和.net中的lambdasbas表达式. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 包裹着这些常量和变量的 ...

  8. Swift学习:闭包(Closures)

    /* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类 ...

  9. Swift学习之十四:闭包(Closures)

    * 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas ...

随机推荐

  1. iOS开发工具——网络封包分析工具Charles

    简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Charles通过将自己设置成系统的网络访问代理服务器,使 ...

  2. JavaScript的深拷贝的实现

    JavaScript的数据类型 简单数据类型 string number boolean function null undefined 复杂数据类型 String Number Boolean Fu ...

  3. 关于SQL SERVER高并发解决方案

    现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...

  4. 专题——web.xml 中 url-pattern

    一.映射什么? 一个请求发送到 servlet 容器,servlet 容器会将当前请求的 url 路径减去 协议.端口号.contextPath,剩下 servletPath 就是用来做 url-pa ...

  5. java.lang.IllegalArgumentException 不合法的参数异常

    报错内容: IllegalArgumentException 不合法的参数异常 十二月 06, 2016 10:06:56 上午 org.apache.catalina.core.StandardWr ...

  6. C#中往数据库插入/更新时候关于NUll空值的处理

    本文转载:http://blog.csdn.net/chybaby/article/details/2338943 本文转载:http://www.cnblogs.com/zfanlong1314/a ...

  7. ASP.NET文本框密码赋默认值的方法

    对于普通的文本输入框,可以使用下边的方法赋默认值: <asp:TextBox ID="TextBox1" runat="server">12345& ...

  8. 记录一款不错的插件fullpage.js

    下载链接包括一些实例: http://www.dowebok.com/demo/2014/77/ 当然也可以从Github 上下载: https://github.com/alvarotrigo/fu ...

  9. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

  10. Uxf框架引入Rest控制器特性

    引入Rest风格接口的特性,主要是为了适应平台化和移动化开发的需要. 移植自ThinkPHP项目的RestAction. REST(Representational State Transfer表述性 ...