Swift3.0-闭包、运算符重载
来源:互联网 发布:linux怎么复制文件夹 编辑:程序博客网 时间:2024/05/22 00:28
闭包(Closure)
自包含的函数代码块,可以在代码中被传递和调用
闭包可以捕获和存储其所在上下文中任意常量和变量的引用
闭包表达式:
{
(parameters) -> returnType in
statements
}
闭包可以使用常量、变量、inout类型作为参数,不提供默认值;元祖也可以作为参数和返回值
全局和嵌套函数实际上也是特殊的闭包
(1)全局函数是一个 有名字但不会捕获任何值 的闭包
(2)嵌套函数是一个 有名字可以捕获其封闭函数域内值的闭包
(3)闭包表达式是一个 捕获上下文变量和常量的匿名闭包
//!!!闭包的函数体部分由关键字in引入,该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始
/* * 闭包(Closure) 自包含的函数代码块,可以在代码中被传递和调用 闭包可以捕获和存储其所在上下文中任意常量和变量的引用 闭包表达式: { (parameters) -> returnType in statements } 闭包可以使用常量、变量、inout类型作为参数,不提供默认值;元祖也可以作为参数和返回值 全局和嵌套函数实际上也是特殊的闭包 (1)全局函数是一个 有名字但不会捕获任何值 的闭包 (2)嵌套函数是一个 有名字可以捕获其封闭函数域内值的闭包 (3)闭包表达式是一个 捕获上下文变量和常量的匿名闭包 *///!!!闭包的函数体部分由关键字in引入,该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始//sorted函数let names:Array<String> = ["China","Alex","Ewa","Draw","Bob"]let i = names.sorted { (s1, s2) -> Bool in return s1 > s2}print(i)//尾部闭包func someFunction(closure:() -> ()){ //函数体部分}//以下是不使用尾随闭包进行函数调用someFunction (closure: { //闭包主体部分})//使用尾随闭包进行函数调用someFunction() { //闭包主体部分}let digitNames = [ 0:"Zero",1:"One",2:"Two",3:"Three",4:"Four", 5:"Five",6:"Six",7:"Seven",8:"Eight",9:"Nine"]let numbers = [16,58,510]func printOut() -> Void { let strings = numbers.map { (number) -> String in var number = number var output = "" while number > 0{ output = digitNames[number % 10]! + output number /= 10 } return output } print(strings)}printOut()/* * 运算符重载 让已有的运算符可以对自定义的类和结构进行运算 */struct Point { var x = 0.0,y = 0.0}func + (left:Point,right:Point) -> Point{ return Point(x:left.x+right.x,y:left.y+right.y)}let p1 = Point(x:3.0,y:1.0)let p2 = Point(x:2.0,y:4.0)let p3 = p1 + p2print("p1=\(p1),p2=\(p2),p3=\(p3)")//前置、后置运算符(prefix、postfix)prefix func - (vector:Point) -> Point{ return Point(x:-vector.x,y:-vector.y)}let post = Point(x:3.0,y:4.0)let nag = -postlet alp = -nagprint("post=\(post),nag=\(nag),alp=\(alp)")//组合赋值运算符func += (left:inout Point,right:Point){ left = left + right}var p5 = Point(x:1.0,y:2.0)let p6 = Point(x:3.0,y:4.0)p5 += p6print("p5=\(p5)")//自定义运算符prefix operator +++prefix func +++ (vector:inout Point) -> Point{ vector += vector return vector}var beDou = Point(x:1.0,y:4.0)let afterDou = +++beDouprint("beDou=\(beDou),afterDou=\(afterDou)")/* * 泛型函数:作用于任何类型 泛型使用了占位类型名字(通常用字母T来表示)来代替实际类型名字(如:Int、String等),占位类型名没有提示T必须是什么类型,但是它提示两个参数必须是同一类型T,不管T是什么类型,每次调用所传入实际类型才能决定T所代表类型 */print("\n泛型函数")func swapTwoValues<T>(a:inout T,b:inout T){//要求两参数类型值一致 let c = a a = b b = c}var beA = "测试"var beB = "test"swapTwoValues(a: &beA,b:&beB)print("a=\(beA),b=\(beB)")//栈操作print("\n栈操作")struct Stack<T>{ var items = [T]() mutating func push(item:T){ items.append(item) } mutating func pop() -> T{ return items.removeLast() }}var stackString = Stack<String>()stackString.push(item: "ni")stackString.push(item: "wo")stackString.push(item: "ta")print(stackString.items)extension Stack{ var topItem:T? { return items.isEmpty ? nil : items[items.count - 1] }}if let topItem = stackString.topItem{ print("The top item on the stack is \(topItem)")}
1 0
- Swift3.0-闭包、运算符重载
- Swift3.0-闭包、运算符重载
- Swift3.0-闭包、运算符重载
- swift3.0 闭包
- swift3.0闭包
- Swift3.0 闭包
- swift3.0闭包
- swift3.0自定义运算符
- swift3.0 基本运算符
- 七、swift3.0运算符
- swift3.0之闭包
- [switf 闭包,重载和自定义运算符]
- swift3.0 逃逸的“闭包”
- Swift3.0中文教程:7.闭包
- 二十 Swift3.0之 闭包
- Swift3.0的闭包总结全
- swift3 闭包
- swift3 闭包表达式
- php过滤数组空值
- iOS10相册相机闪退bug
- ubuntu为vlc-android编译 更新protoc为3+
- 微信小程序之图书管理系统(wepy版)
- Maven构建web项目默认web module2.3需要转变成3.0注意点
- Swift3.0-闭包、运算符重载
- Cocos2d-JS 2017.1.19-代码阅读笔记
- MFC积累几个内容
- Android 原生第三方登录
- JUnit4 + Eclipse “An internal error occured during Launching”
- poj2506--Tiling
- Android 自定义功能按键实现
- angular复制到剪贴板
- #关于xcode 日志打印中文变成编码的解决代码