可选项判断

  • 由于可选项的内容可能为 nil,而一旦为 nil 则不允许参与计算
  • 因此使用中,经常需要判断可选项的内容是否为 nil

单个可选项判断

  1. let url = NSURL(string: "http://www.baidu.com")
  2. //: 方法1: 强行解包 - 缺陷,如果 url 为空,运行时会崩溃
  3. let request = NSURLRequest(URL: url!)
  4. //: 方法2: 首先判断 - 代码中仍然需要使用 `!` 强行解包
  5. if url != nil {
  6. let request = NSURLRequest(URL: url!)
  7. }
  8. //: 方法3: 使用 `if let`,这种方式,表明一旦进入 if 分支,u 就不在是可选项
  9. if let u = url where u.host == "www.baidu.com" {
  10. let request = NSURLRequest(URL: u)
  11. }

可选项条件判断

  1. //: 1> 初学 swift 一不小心就会让 if 的嵌套层次很深,让代码变得很丑陋
  2. if let u = url {
  3. if u.host == "www.baidu.com" {
  4. let request = NSURLRequest(URL: u)
  5. }
  6. }
  7. //: 2> 使用 where 关键字,
  8. if let u = url where u.host == "www.baidu.com" {
  9. let request = NSURLRequest(URL: u)
  10. }
  • 小结

    • if let 不能与使用 &&|| 等条件判断
    • 如果要增加条件,可以使用 where 子句
    • 注意:where 子句没有智能提示

多个可选项判断

  1. //: 3> 可以使用 `,` 同时判断多个可选项是否为空
  2. let oName: String? = "张三"
  3. let oNo: Int? = 100
  4. if let name = oName {
  5. if let no = oNo {
  6. print("姓名:" + name + " 学号: " + String(no))
  7. }
  8. }
  9. if let name = oName, let no = oNo {
  10. print("姓名:" + name + " 学号: " + String(no))
  11. }

判断之后对变量需要修改

  1. let oName: String? = "张三"
  2. let oNum: Int? = 18
  3. if var name = oName, num = oNum {
  4. name = "李四"
  5. num = 1
  6. print(name, num)
  7. }

for 循环

  • OC 风格的循环
  1. var sum = 0
  2. for var i = 0; i < 10; i++ {
  3. sum += i
  4. }
  5. print(sum)
  • for-in,0..<10 表示从0到9
  1. sum = 0
  2. for i in 0..<10 {
  3. sum += i
  4. }
  5. print(sum)
  • 范围 0...10 表示从0到10
  1. sum = 0
  2. for i in 0...10 {
  3. sum += i
  4. }
  5. print(sum)
  • 省略下标

    • _ 能够匹配任意类型
    • _ 表示忽略对应位置的值
  1. for _ in 0...10 {
  2. print("hello")
  3. }
  4.  

字符串

在 Swift 中绝大多数的情况下,推荐使用 String 类型

  • String 是一个结构体,性能更高

    • String 目前具有了绝大多数 NSString 的功能
    • String 支持直接遍历
  • NSString 是一个 OC 对象,性能略差
  • Swift 提供了 String 和 NSString 之间的无缝转换

字符串演练

  • 遍历字符串中的字符
  1. for s in str.characters {
  2. print(s)
  3. }
  • 字符串长度
  1. // 返回以字节为单位的字符串长度,一个中文占 3 个字节
  2. let len1 = str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
  3. // 返回实际字符的个数
  4. let len2 = str.characters.count
  5. // 返回 utf8 编码长度
  6. let len3 = str.utf8.count
  • 字符串拼接

    • 直接在 "" 中使用 \(变量名) 的方式可以快速拼接字符串
  1. let str1 = "Hello"
  2. let str2 = "World"
  3. let i = 32
  4. str = "\(i) 个 " + str1 + " " + str2

我和我的小伙伴再也不要考虑 stringWithFormat 了 :

  • 可选项的拼接

    • 如果变量是可选项,拼接的结果中会有 Optional
    • 为了应对强行解包存在的风险,苹果提供了 ?? 操作符
    • ?? 操作符用于检测可选项是否为 nil
      • 如果不是 nil,使用当前值
      • 如果是 nil,使用后面的值替代
  1. let str1 = "Hello"
  2. let str2 = "World"
  3. let i: Int? = 32
  4. str = "\(i ?? 0) 个 " + str1 + " " + str2
  • 格式化字符串
  • 如果需要指定字符串格式,可以使用 String(format:...) 的方式
  1. let h = 8
  2. let m = 23
  3. let s = 9
  4. let timeString = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
  5. let timeStr = String(format: "%02d:%02d:%02d", h, m, s)

String & Range 的结合

  • 在 Swift 中,String 和 Range连用时,语法结构比较复杂
  • 如果不习惯 Swift 的语法,可以将字符串转换成 NSString 再处理
  1. let helloString = "我们一起飞"
  2. (helloString as NSString).substringWithRange(NSMakeRange(2, 3))
  • 使用 Range 的写法
  1. let startIndex = helloString.startIndex.advancedBy(0)
  2. let endIndex = helloString.endIndex.advancedBy(-1)
  3. helloString.substringWithRange(startIndex..<endIndex)

Swift 入门之简单语法(二)的更多相关文章

  1. Swift 入门之简单语法(六)

    KVC 字典转模型构造函数 /// `重写`构造函数 /// /// - parameter dict: 字典 /// /// - returns: Person 对象 init(dict: [Str ...

  2. Swift 入门之简单语法(四)

    函数 目标 掌握函数的定义 掌握外部参数的用处 掌握无返回类型的三种函数定义方式 代码实现 函数的定义 格式 func 函数名(行参列表) -> 返回值 {代码实现} 调用 let result ...

  3. Swift 入门之简单语法(一)

    定义 let 定义常量,一经赋值不允许再修改 var 定义变量,赋值之后仍然可以修改 //: # 常量 //: 定义常量并且直接设置数值 let x = 20 //: 常量数值一经设置,不能修改,以下 ...

  4. Swift 入门之简单语法(五)

    面向对象 目标 构造函数 构造函数的基本概念 构造函数的执行顺序 KVC 在构造函数中的使用及原理 便利构造函数 析构函数 区分 重载 和 重写 懒加载 只读属性(计算型属性) 设置模型数据(didS ...

  5. Swift 入门之简单语法(三)

    集合 数组 数组使用 [] 定义,这一点与 OC 相同 //: [Int] let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 遍历 for num in nu ...

  6. Swift入门教程:基本语法(二)

    数字格式 数字可以增加额外的格式,使它们更容易阅读 可以增加额外的零 0 let money = 001999           // 1999 let money2 = 001999.000   ...

  7. Swift入门教程:基本语法大全

    原文:Swift入门教程:基本语法大全       简介:                                                                        ...

  8. Redis入门很简单之二【常见操作命令】

    Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存  Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...

  9. Swift入门教程:基本语法(一)

          简介:                                                                                       什么是S ...

随机推荐

  1. selenium实例:unittest框架+PO开发模式

    这是<selenium2+python学习总结>的升级版. 1.         项目结构 2.         项目代码 1)         globalparameter.py # ...

  2. Java解决TopK问题(使用集合和直接实现)

    在处理大量数据的时候,有时候往往需要找出Top前几的数据,这时候如果直接对数据进行排序,在处理海量数据的时候往往就是不可行的了,而且在排序最好的时间复杂度为nlogn,当n远大于需要获取到的数据的时候 ...

  3. 关闭discuzX3.2注册页面的注册邮箱验证

    论坛升级后发现注册用户在输入任何邮箱email时,一直提示email 地址无效.用firephp跟踪发现:随机生成的email的后缀是@localhost! 找到原因,修改如下: //原来代码 if( ...

  4. TCP/IP笔记(六)TCP与UDP

    终于来到了传输层,这个面试问的最多了,内容比较多,要分两篇来总结,这是第一篇

  5. tomcat的常用配置

    1.解決get请求的中文乱码问题 解决办法: 首先找到tomcat路径下的apache-tomcat-7.0.52\conf文件夹,打开server.xml文件,编辑如下内容: <Connect ...

  6. 转Fiddler 构造http请求

    今天使用Fiddler构造一个POST请求,server端的PHP脚本的 $_POST数组中怎么也获取不到值,后来偶然发现是因为缺少了一个http头:Content-Type: application ...

  7. 实体类和数据表的映射异常(XXX is not mapping[ ])

    在使用SSH框架开发过程,使用hibernate框架提供的工具类实现与数据库数据交互,在执行cmd操作时,如果出现以下异常: org.hibernate.hql.ast.QuerySyntaxExce ...

  8. SQL Server 数据库连接方法

    我们用c#写ado或者是asp,都需要连接数据库来读写数据,今天我们就来总结一下数据库连接都有哪些方法. 首先我们就写最直接的方法,在事件中直接连接.(在这里就用WEB页面来展示) 首先我们建立web ...

  9. HTTP协议详解以及URL具体访问过程

    1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...

  10. PowerDesigner 12.5破解方法

    PowerDesigner 12.5破解方法 创建于 2017-05-07 22:18:04   一.下载   1 . PowerDesigner 12.5 官方下载地址  http://downlo ...