Swift 学习记录(4)
来源:互联网 发布:microsoft mac 编辑:程序博客网 时间:2024/05/20 02:51
import Foundation/***嵌套函数***/func getMathFunc(type:String) -> (Int)-> Int{ func squre(num:Int)->Int { return num*num; } func cube(num:Int)->Int { return num*num*num; } switch type { case "squre": return squre; case "cube": return cube; default: return cube; } }var mathFunc = getMathFunc("squre");print(mathFunc(3));/***闭包----嵌套函数的简化表达 1.没有函数名 2.大括号提前到形参列表前 3.返回值后面加in表示函数体 ***///{(形参列表) -> 返回值类型 in// 可执行表达式//}//刚才嵌套函数的简化func getMathFunc01(type:String) -> (Int)-> Int{ switch type { case "squre": return {(num:Int)->Int in return num*num; }; case "cube": return {(num:Int)->Int in return num*num*num; }; default: return {(num:Int)->Int in return num*num*num; }; } }var mathFunc01 = getMathFunc01("squre");print(mathFunc01(5));mathFunc01 = getMathFunc01("cube");print(mathFunc01(5));//---------根据上下文推断类型//省略形参类型和返回值类型,swift会根据变量类型推断var squre:(Int) -> Int = {(num) in return num*num }print(squre(3))//可以推断形参类型,小括号也可以省略var squre1:(Int) -> Int = {num in return num*num }print(squre1(3))//如果闭包中的函数体只有一行代码,那么return就可以省略var squre2:(Int) -> Int = {num in num*num }print(squre2(3))//省略形参名,用$0,$1...表示第一个,第二个参数...var squre3:(Int) -> Int = { $0 * $0 }print(squre3(3))var names = ["Mike", "John", "Mary", "Tom", "Bill"]// 从小到大排序func sortFun(s1:String, s2:String) -> Bool{ return s1 < s2;}// inoutvar sortedNames = names.sort(sortFun);print(sortedNames)// 第1步 改成闭包形式var sortedNames1 = names.sort({(s1:String, s2:String) -> Bool in return s1 < s2})// 第2步 省略参数类型var sortedNames2 = names.sort({(s1, s2) -> Bool in return s1 < s2})// 第3步 省略返回值类型var sortedNames3 = names.sort({(s1, s2) in return s1 < s2})// 第4步 省略return语句var sortedNames4 = names.sort({(s1, s2) in s1 < s2})// 第5步 省略形参名,用$0,$1...表示第一个,第二个参数...var sortedNames5 = names.sort({$0 < $1})// 第6步 运算符函数 Swift 的String类型定义了关于大于号(>)的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。因此,可以简单地传递一个大于号,Swift 可以自动推断出您想使用大于号的字符串函数实现:var sortedNames6 = names.sort(<)print(sortedNames6)var result:Int = { var temp = 1 for i in 1...$1 { temp *= $0 } return temp }(4,3)print(result)/** 尾随闭包 如果函数的最后一个参数值是闭包,可以将闭包写在函数体外面 */func someFunction(num:Int , fn:(Int) -> ()){ }someFunction(20, fn:{_ in })someFunction(20) {_ in }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]let strings = numbers.map { (number) -> String in var t = number var output = "" while t > 0 { output = digitNames[t % 10]! + output t /= 10 } return output}print(strings)//捕获上下文中的变量或者常量//即使这些常量和变量所在的作用域不存在时,捕获的常量与变量仍会保存最后一次使用它们的值func makeIncrementor(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementor() -> Int { runningTotal += amount return runningTotal } return incrementor}let incrementByTen = makeIncrementor(forIncrement: 10)//runningTotal 仍可以正常使用print(incrementByTen())print(incrementByTen())print(incrementByTen())//10//20//30let incrementBySeven = makeIncrementor(forIncrement: 7)incrementBySeven()// 返回的值为7incrementByTen()// 返回的值为40
0 0
- Swift 学习记录(4)
- swift学习记录(开端)
- swift学习记录(Optional)
- swift学习记录(switch)
- swift学习记录(for)
- swift学习记录(func)
- 操作 swift学习记录(-)
- swift学习记录(selector)
- swift学习记录(in)
- swift 学习记录(一)
- swift 学习记录(二)
- swift 学习记录(三)
- swift 学习记录(四)
- swift学习记录(String)
- swift学习记录(函数)
- swift学习记录(枚举)
- swift 学习记录(继承)
- swift学习记录(析构器)
- iOS多线程
- 在Android Studio中有六种依赖
- 神经视觉感知Perception Lecture Notes: LGN and V1
- Windows tomcat部署 solr
- C++作业1
- Swift 学习记录(4)
- 谈谈关于开发中的"锁"
- 动态代理获取方法上的注解(Retrofit框架必备内容)
- 结构体字节对齐
- Xutils 如何增加TLS1.2的支持
- linux 由低级用户切换到root 用户 的命令
- 数据库(十)mysql 表操作命令(表创建、修改、删除等)
- C#调用java的jar文件的方法(转)
- ThinkPHP3.2URL重写隐藏应用的入口文件index.php