Swift 的基本语法.docx_第1页
Swift 的基本语法.docx_第2页
Swift 的基本语法.docx_第3页
Swift 的基本语法.docx_第4页
Swift 的基本语法.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Swift 的基本语法1.基本语法1.1变量和常量:1.1.1定义let 定义常量,一旦赋值不允许再修改.Var定义变量,赋值之后仍然可以修改.1.1.2自动推导:swift能够根据右边的代码,推导出变量的类型通常在开发的时候不需要指定变量类型如果需要指定变量类型,可以在变量名后使用:,然后跟上变量的类型1.1.3 没有隐式转换swift 对数据类型要求严格任何时候,都不允许做隐式转换 1.1.4 let 和 var 的选择应该尽量先选择常量,只有在必须修改时,才修改为 var在 xcode7.0中,如果没有修改变量, xcode 会提示修改为 let1.2 Optional 可选项1.2.1Optional 是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题定义变量时,如果指定是可选的,表示该变量可以有一个指定类型的值,也可以是 nil定义变量时,在类型后面添加一个 ?,表示该变量是可选的变量可选项的默认值是 nil常量可选项没有默认值,主要用于在构造函数中给常量设置初始数值如果 Optional 值是 nil,不允许参与计算,只有解包(unwrap)后才能参与计算,在变量后添加一个 !,可以强行解包1.2.2常见错误unexpectedly found nil while unwrapping an Optional value1.2.3 ?运算符? 运算符可以用于判断 变量/常量 的数值是否是 nil,如果是则使用后面的值替代在使用 Swift 开发时,? 能够简化代码的编写1.3 控制流1.3.1 ifSwift 中没有 C 语言中的非零即真概念在逻辑判断时必须显示地指明具体的判断条件 true / false,if 语句条件的 () 可以省略,但是 不能省略1.3.2 三目运算Swift 中的 三目 运算保持了和 OC 一致的风格1.3.3 可选项判断由于可选项的内容可能为 nil,而一旦为 nil 则不允许参与计算因此在实际开发中,经常需要判断可选项的内容是否为 nil单个可选项判断 用 if条件判断小结:if let 不能与使用 &、| 等条件判断如果要增加条件,可以使用 where 子句注意:where 子句没有智能提示多个可选项判断用,同时判断多个可选项,判断之后要对可选项进行修改guardguard 是与 if let 相反的语法,Swift 2.0 推出在程序编写时,条件检测之后的代码相对是比较复杂的使用 guard 的好处能够判断每一个值在真正的代码逻辑部分,省略了一层嵌套1.3.4switchswitch 不再局限于整数switch 可以针对任意数据类型进行判断不再需要 break每一个 case后面必须有可以执行的语句要保证处理所有可能的情况,不然编译器直接报错,不处理的条件可以放在 default 分支中每一个 case 中定义的变量仅在当前 case 中有效,而 OC 中需要使用 1.4 循环oc 风格for in 0. 返回值 代码实现 调用 let result = 函数名(值1, 参数2: 值2.)func sum(a: Int, b: Int) - Int return a + blet result = sum(10, b: 20) 没有返回值的函数,一共有三种写法 省略 () Voidfunc demo(str: String) - Void print(str)func demo1(str: String) - () print(str)func demo2(str: String) print(str)demo(hello)demo1(hello world)demo2(olleh) 外部参数 在形参名前再增加一个外部参数名,能够方便调用人员更好地理解函数的语义 格式:func 函数名(外部参数名 形式参数名: 形式参数类型) - 返回值类型 / 代码实现 Swift 2.0 中,默认第一个参数名省略func sum1(num1 a: Int, num2 b: Int) - Int return a + bsum1(num1: 10, num2: 20)闭包与 OC 中的 Block 类似,闭包主要用于异步操作执行完成后的代码回调,网络访问结果以参数的形式传递给调用方目标 掌握闭包的定义 掌握闭包的概念和用法 了解尾随闭包的写法 掌握解除循环引用的方法OC 中 Block 概念回顾 闭包类似于 OC 中的 Block 预先定义好的代码 在需要时执行 可以当作参数传递 可以有返回值包含 self 时需要注意循环引用闭包的定义 定义一个函数/: 定义一个 sum 函数func sum(num1 num1: Int, num2: Int) - Int return num1 + num2sum(num1: 10, num2: 30)/: 在 Swift 中函数本身就可以当作参数被定义和传递let mySum = sumlet result = mySum(num1: 20, num2: 30) 定义一个闭包 闭包 = (行参) - 返回值 in / 代码实现 in 用于区分函数定义和代码实现/: 闭包 = (行参) - 返回值 in / 代码实现 let sumFunc = (num1 x: Int, num2 y: Int) - Int in return x + ysumFunc(num1: 10, num2: 20) 最简单的闭包,如果没有参数/返回值,则 参数/返回值/in 统统都可以省略 代码实现 let demoFunc = print(hello)基本使用GCD 异步 模拟在后台线程加载数据func loadData() dispatch_async(dispatch_get_global_queue(0, 0), () - Void in print(耗时操作 (NSThread .currentThread() ) 尾随闭包,如果闭包是最后一个参数,可以用以下写法 注意上下两段代码, 的位置func loadData() dispatch_async(dispatch_get_global_queue(0, 0) () - Void in print(耗时操作 (NSThread .currentThread() 闭包的简写,如果闭包中没有参数和返回值,可以省略func loadData() dispatch_async(dispatch_get_global_queue(0, 0) print(耗时操作 (NSThread .currentThread() 自定义闭包参数,实现主线程回调 添加没有参数,没有返回值的闭包override func viewDidLoad() super.viewDidLoad() loadData print(完成回调) / MARK: - 自定义闭包参数func loadData(finished: ()-() dispatch_async(dispatch_get_global_queue(0, 0) print(耗时操作 (NSThread.currentThread() dispatch_sync(dispatch_get_main_queue() print(主线程回调 (NSThread.currentThread() / 执行回调 finished() 添加回调参数override func viewDidLoad() super.viewDidLoad() loadData4 (html) - () in print(html) / 加载数据/ 完成回调 - 传入回调闭包,接收异步执行的结果func loadData4(finished: (html: String) - () dispatch_async(dispatch_get_global_queue(0, 0) print(加载数据 (NSThread.currentThread() dispatch_sync(dispatch_get_main_queue() print(完成回调 (NSThread.currentThread() finished(html: hello world) 循环引用 建立 NetworkTools 对象class NetworkTools: NSObject / 加载数据 / / - parameter finished: 完成回调 func loadData(finished: () - () print(开始加载数据.) / . finished() deinit print(网络工具 88) 实例化 NetworkTools 并且加载数据class ViewController: UIViewController var tools: NetworkTools? override func viewDidLoad() super.viewDidLoad() tools = NetworkTools() tools?.loadData() print(come here (self.view) / 与 OC 中的 dealloc 类似,注意此函数没有() deinit print(控制器 88) 运行不会形成循环引用,因为 loadData 执行完毕后,就会释放对 self 的引用 修改 NetworkTools,定义回调闭包属性/ 完成回调属性var finishedCallBack: ()-()?/ 加载数据/ - parameter finished: 完成回调func loadData(finished: () - () self.finishedCallBack = finished print(开始加载数据.) / . working()func working() finishedCallBack?()deinit print(网络工具 88)运行测试,会出现循环引用解除循环引用 与 OC 类似的方法/ 类似于 OC 的解除引用func demo() weak var weakSelf = self tools?.loadData() print(weakSelf?.view) Swift 推荐的方法loadData weak self in print(self?.view) 还可以loadData unowned self in prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论