swift闭包_002_swift闭包

//: Playground - noun: a place where people can play

import UIKit

//-----闭包-------//
//是独立的代码块,可以代码中进行传递和使用
//swift中的闭包和OC中的block相似
//函数是一种特殊的闭包,是有名称的闭包

//1.基本使用
/*
闭包的语法:
{ (参数1,参数2) -> 返回值类型 in
    闭包的代码
}
*/
func add(a:Int, b:Int) -> Int {

    return a + b

}

let closure = {(a:Int, b:Int) -> Int in

    return a + b
}

add(1, b: 2)
closure(1, 2)

//闭包的类型就是函数类型
let closure2 : (Int, Int)->Int = {(a:Int, b:Int) -> Int in

    return a + b
}
//闭包语法的简化,如果想省略闭包中参数和返回值的类型则需要显式的指定闭包变量的类型
let closure3 : (Int, Int)->Int = {a,b in
    return a + b

}

//单表达式引式返回:如果闭包的代码中只有一个表达式,则return可以省略
let closure4:(Int, Int)->Int = {a,b in a + b}
closure4(10,5)

//参数名也可以省略
let closure5:(Int, Int)->Int = {$0 + $1}
closure5(1,2)

//2.分别用函数和闭包实现数组中元素的遍历(对数组中每个元素执行某段代码)
func emnumerateArray(array : [Int], function: (Int) -> Void) {

    for item in array {
        function(item)
    }
}

//每个元素将要执行的函数
func printItem(var item: Int) {

    item++
    print(item)
}

let array = [1, 2, 3, 7]
//emnumerateArray(array, function: printItem)

let closure6 = { (item: Int) -> Void in
    print(item)
}

emnumerateArray(array, function: closure6)

emnumerateArray(array, function: { (item: Int) -> Void in
    print(item)
    }
)

//3.尾随闭包:如果闭包是最后一个参数,可以把闭包表达式写在函数参数()的后面,用来增加代码可读性
emnumerateArray(array) { (item : Int) -> Void in
     print(item)
}

//4.闭包捕获值
func makeIncrement(forIncrementor amount: Int) -> (Void)->Int {

    var total = 0

    //嵌套函数可以捕获外部函数的变量或者常量
//    func incrementor() -> Int {
//
//        total += amount
//        print("total = \(total)")
//
//        return total
//    }
//
//    return incrementor

    //闭包可以捕获外部定义的变量或者常量
    let incrementor1 : (Void)->Int = {  (Void)->Int in

        total += amount
        print("total = \(total)")

        return total

    }

    return incrementor1

}

let closure7 = makeIncrement(forIncrementor: 2)
closure7()
closure7()

//闭包是引用类型
let closure8 = makeIncrement(forIncrementor: 3)
closure8()
closure8()

let closure9 = closure8
closure9()

var a = 0 //Int
var b = a
a = a + 1

print(b)
时间: 2024-08-27 16:35:33

swift闭包_002_swift闭包的相关文章

Swift函数和闭包

函数 Swift 使用func关键字声明函数: 1 func greet (name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet ("Bob", "Tuesday") 通过元组(Tuple)返回多个值: 1 func getGasPrices () -> (Double, Double, Double)

19.Swift中的闭包

import UIKit class HttpTool: NSObject { var callBack : (()->())? /* 闭包的写法: 类型:(参数列表) -> (返回值) 建议:写闭包时,记住格式直接先写 () -> () 在需要参数或者返回值,在内部填充对应的东西即可 */ func loadData(callBack : () -> ()) { self.callBack = callBack dispatch_async(dispatch_get_global

Swift中的闭包(Closure) 浅析

转载自:http://www.devtalking.com/articles/closure-expressions-in-swift/ 闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在S

Swift学习:闭包(Closures)

/* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类似.* 闭包可以捕获和存储上下文中定义的的任何常量和变量的引用.这就是所谓的变量和变量的自封闭,* 因此命名为”闭包“(“Closures)”).Swift还会处理所有捕获的引用的内存管理.** 全局函数和嵌套函数其实就是特殊的闭包.* 闭包的形式有:* (1)全局函数都是闭包,有名字但不能捕获任何

Swift中的闭包(Closure)[转]

闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在Swift的很多文档教材中都说函数是“一等公民”,起初我还不是很理解“一等公民”是什么意思,但当我理解了闭包以及它的强大功能后,我恍然大悟.

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。

闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:如果您不熟悉 捕获 (capturing) 这个概念也不用担心,后面会详细对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的

Swift 3.0 闭包的定义和使用

// // ViewController.swift // 闭包的定义和使用 // // Created by 思 彭 on 16/9/17. // Copyright © 2016年 思 彭. All rights reserved. // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 1>. 最简单的闭包 ()->()没有参

Swift 学习- 08 -- 闭包

// 闭包是自包含的函数代码块, 可以在代码中被传递和使用, swift 中的闭包 与 C语言 和 OC 中的代码块 (blocks) 以及其他一些编程语言中的匿名函数比较类似 // 闭包可以捕获和存储其所在上下文中任意常量和变量的引用, 被称为包裹常量和变量, swift 会为你管理在捕获过程中涉及到的所有内存操作 // 在 '函数' 章节中介绍的全局和嵌套函数实际上也是特殊的闭包, 闭包采取如下三种形式之一: // 1: 全局函数是一个有名字但不会捕获任何职的闭包 // 2: 嵌套函数是一个

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較类似。

闭包是功能性自包括模块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較相似. 闭包能够 捕获 和存储其所在上下文中随意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:假设您不熟悉 捕获 (capturing) 这个概念也不用操心.后面会具体对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的