一.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. JavaScript面试库

    1.将一段字符串转成驼峰命名法. var str = "web-kit-index"; function to(str){ var j = str.split("-&qu ...

  2. 二项堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了二项堆,本章给出二项堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 二项树的介绍2. 二项堆的介绍3. 二项堆的基本操作4. 二项堆的 ...

  3. 云计算之路-阿里云上:消灭“黑色n秒”第二招——给w3wp进程指定CPU核

    虽然昨天的第一招失败了,但是从失败中我们学到了与多核CPU相关的Processor Affinity(处理器关联)的知识. 既然我们可以让.NET程序的不同线程运行于指定的CPU核,那是不是也可以让I ...

  4. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  5. ELK+FileBeat+Log4Net搭建日志系统

    ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...

  6. ACM中的浮点数精度处理

    在ACM中,精度问题非常常见.其中计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了.精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,让你debu ...

  7. Winform里面的缓存使用

    缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.本文主要针对自己在Winform方面的缓存使用做一个引导性的介绍,希望大家能够从中了解一些缓存 ...

  8. C# 之屏幕找图

    引言 最近,由于工作上的某些原因,又要写类似于外挂的程序,又要用到一个屏幕找图功能,很多程序(eg:按键精灵)都提供了类似的功能,其实在这之前,我也查找过很多类似的C#方法,因为之前有一个试过没有用得 ...

  9. VS用法总结

    工欲善其事,必先利其器,关于VS的“即时窗口”的使用: 打开“即时窗口”的快捷键是:Ctrl + Alt + I. 要在“即时窗口”中打印查看打印输出结果,必须按如下步骤设置:[工具]→[选项]→[调 ...

  10. Titanium开发环境搭建第一个坑

    操作系统: Ubuntu 12.04 LTS AMD64 在Titanium Studio中,装Titanium CLI怎么都不能成功,到了一个进度,发现卡在那里,硬盘一直狂闪,发现在Studio的文 ...