1 //: Playground - noun: a place where people can play 2 3 import UIKit 4 5 //*******************嵌套函数***************************** 6 func getMathFunc(type:String) -> ((Int) -> Int) { 7 func squre(num:Int) -> Int{ 8 return num * num 9 } 10 func cube(num:Int) -> Int{ 11 return num * num * num 12 } 13 switch (type) { 14 case "squre": 15 return squre 16 default: 17 return cube 18 } 19 } 20 21 var mathFunc = getMathFunc("squre") 22 mathFunc(4) 23 var mathFunc2 = getMathFunc("other") 24 mathFunc2(4) 25 26 27 //********************闭包**************************** 28 // { (形参列表) -> 返回值类型 in 29 // 可执行表达式 30 // } 31 32 func getMathFunc1(type:String) -> ((Int) -> Int) { 33 func squre(num:Int) -> Int{ 34 return num * num 35 } 36 func cube(num:Int) -> Int{ 37 return num * num * num 38 } 39 switch (type) { 40 case "squre": 41 return {(num:Int) -> Int in 42 return num * num 43 } 44 default: 45 return {(num:Int) -> Int in 46 return num * num * num 47 } 48 } 49 } 50 var maxFunc3 = getMathFunc("squre") 51 maxFunc3(5) 52 var maxFunc4 = getMathFunc("other") 53 maxFunc4(5) 54 55 // 56 var squre: (Int) -> Int = {(num) in return num * num} 57 squre(3) 58 59 60 //?? 如果??左边有值就就是原值,如果没有值那么就设置为??右边的值 61 var a:Int? 62 //a = 11 63 print(a ?? 2)
//: Playground - noun: a place where people can play import UIKit print("555") // MARK - guard func checkup(person:[String:String]){ guard let id = person["id"] else { print("没有id,不能进入") return } guard let exam = person["exam"] else{ print("没有exam,不能进入") return } print("id:\(id),exam:\(exam)--批准进入") } //checkup(["id":"123"]) //checkup(["exam":"456"]) checkup(["id":"123","exam":"456"]) //MARK - 熟悉观察 let MaxValue = 999 let MinValue = -999 var number = 0 { willSet{ print("从\(number)变为\(newValue)") } didSet{ if number > MaxValue { number = MaxValue }else if number < MinValue{ number = MinValue } print("已经从\(oldValue)变为\(number)") } } number = 1000 number //MARK - 扩展 extension //对Int扩展,增加一个方法 extension Int { func times(closure:(() -> ())?){ if self >= 0 { for _ in 0..<self { closure?() } } } } 3.times{print("走起")} //MARK 协议扩展 extension CustomStringConvertible{ var upperDescription:String{ return self.description.uppercaseString } } ["key":"value"].upperDescription //map:得到一个由闭包里面的返回值组成的新序列 //flatMap:与map类似的功能,但是会过滤掉返回值里面的nil值 //filter:得到一个由闭包返回值为true的值组成的新序列 var result = [1,2,3,4,5].map{$0 * 2} result result = [1,2,3,4,5].filter{$0 > 2} result //MARK 单例 class TestObject { static let testObject = TestObject() //私有构造,保证外部对象通过init方法创建单例类的其他实例 private init() { } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】