2.逻辑分支

简单体验

var i = 10

if i > 0 {
    println("OK")
}
  • 阶段性小结

    • Swift 中没有 C 语言中的非零即真概念
    • 在逻辑判断时必须显示地指明具体的判断条件
    • if 语句条件的 () 可以省略
    • 但是 {} 不能省略

三目

var a = 10
var b = 50

var result = a > b ? a : b
println(result)
  • 阶段性小结

    • Swift 中的 三目 运算保持了和 OC 一致的风格

可选项

演练 1

let url = NSURL(string: "http://www.baidu.com/?word=iphone")

if url != nil {
    NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, _, _) -> Void in
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    }).resume()
}
  • 阶段性小结

    • 在 Swift 中,不是所有的对象实例化方法都会返回值,在实际开发中需要注意实例化函数的返回类型,例如:

      convenience init?(string URLString: String)
      
    • 如果有 ? 表示改方法有可能无法实例化到正确的对象
    • 这种函数返回的对象,被称为 可选项,即有可能有值,也有可能没有值
    • 实际开发时,需要针对这种对象加以判断,并且在分支内部使用 !,指明改对象确实是存在的
    • 相比在 OC 的开发,尤其在日常练习时,会给定一个能够运行的值,而在实际运行时,一旦条件不满足,会直接闪退,这样用户体验会非常不好

Swift 的设计者考虑到因为对类型的强制要求,会让代码很难看,因此提供了一个变通的解决方案

演练 2

if let let url = NSURL(string: "http://www.baidu.com/?word=iphone") {
    NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, _) -> Void in
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    }).resume()
}
  • 阶段性小结

    • 使用 if let 常量 = 可选构造函数 的方式能够确保分支内部常量一定是有值的
    • 并且在分支内部不再需要使用 !
    • 这是 Swift 代码中的一个非常重要的使用技巧
  • 提示
    • 尽管 Swift 提供了类型校验的手段,但是要写出 优雅 的 Swift 代码,还是需要多加练习的,否则一不小心就会出现分支嵌套层次很深的代码
    • 有关 ? 和 ! 的选择,可以借助 Xcode 的辅助工具,但是强烈建议每次遇到提示时,要多加思考,反复揣摩

演练3

var name: String?
println(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))

name = "zhangsan"
println(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))

let l = 10
println(l + (name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) ?? 0))
  • 阶段性小结

    • ?? 是一个非常有用的操作符,能够快速对 nil 进行判断
    • 如果对象是 nil,则使用 ?? 后面的值代替前面的 nil 值参与计算
    • 在使用 ?? 时,整个部分需要使用 () 包装
    • 这一技巧在 UITableView 的数据源方法中尤为重要
时间: 2024-12-13 18:32:50

2.逻辑分支的相关文章

逻辑分支

流程控制有几种? 顺序结构.循环结构.选择结构 什么是顺序结构? 从上到下依次执行每一条语句,不允许跳过任何一条语句. 什么是选择结构? 根据条件判断,执行一段语句块. 实现选择结构有哪几种语句? ?:三目运算符(三元运算符) 使用环境:一个条件,两个结果,而且结果只有少数的语句b=1?b:c if (1) if(){} :单分支语句 格式: if(表达式){ 语句组: } //当语句组只有一条的时候,{}可以省略. 逻辑关系:当执行到if时,先计算表达式的值,值为true时,执行后面的语句组.

ios开发swift学习第三天:逻辑分支

一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有明确的真假 不再有非0即真 必须有明确的Bool值(swift中的Bool值用false/true来表示) Bool有两个取值:false/true // 演练一: let a = 10 // 错误写法: //if a { // print("a") //} // 正确写法 if a &g

android产品业务逻辑对app稳定影响太大

产品经理们, 看看你们的交互文档, 有n个逻辑分支, 在我们的实现中至少存在2*n个逻辑分支 这样极度造成了app的不稳定性,表现就是 非必须的bug很多.还有就是维护性极差 当然你们会说,你们可以写一些高内聚和少耦合的代码 来减少依赖. 我想说的是,我去,业务逻辑的代码,你搞这么多分支, 对应这么多业务情况,还要加上异常情况,完全没有 使代码高内聚. 客户端比较常用的模式MVC,MVVM,MVP 业务逻辑的复杂直接导致V,VM,P很复杂 甚至最后这3种模式发展成为四不像.

求解逻辑问题:谁养鱼

早上一如既往地排毒,蹲着无聊,于是乎想起了这个经典的逻辑问题,再次思考求解,有了新的思路和收获.首先,让我们再来温习一下题目: 1.有5栋5种颜色的房子 2. 每一位房子的主人国籍都不同 3. 这5个人每人只喝一个牌子的饮料, 只抽一个牌子的香烟,只养一种宠物 4. 没有人有相同的宠物, 抽相同牌子的香烟, 喝相同的饮料 提示: 1. 英国人住在红房子里 2. 瑞典人养了一条狗 3. 丹麦人喝茶 4. 绿房子在白房子左边 5. 绿房子主人喝咖啡 6. 抽pall mall烟的人养了一只鸟 7.

Python 工匠:编写条件分支代码的技巧

序言 编写条件分支代码是编码过程中不可或缺的一部分. 如果用道路来做比喻,现实世界中的代码从来都不是一条笔直的高速公路,而更像是由无数个岔路口组成的某个市区地图.我们编码者就像是驾驶员,需要告诉我们的程序,下个路口需要往左还是往右. 编写优秀的条件分支代码非常重要,因为糟糕.复杂的分支处理非常容易让人困惑,从而降低代码质量.所以,这篇文章将会种重点谈谈在 Python 中编写分支代码应该注意的地方. Python 里的分支代码 Python 支持最为常见的 if/else 条件分支语句,不过它缺

Python :编写条件分支代码的技巧

『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有更多的小细节,比如何时使用异常(Exceptions).或怎么给变量起名.那些真正优秀的代码,正是由无数优秀的细节造就的. 序言 编写条件分支代码是编码过程中不可或缺的一部分. 如果用道路来做比喻,现实世界中的代码从来都不是一条笔直的高速公路,而更像是由无数个岔路口组成的某个市区地图.我们编码者就像

写if-else不外乎两种场景:异常逻辑处理和不同状态处理。

异常逻辑处理说明只能一个分支是正常流程,而不同状态处理都所有分支都是正常流程. 第一个例子`if (obj != null)`是异常处理,是代码健壮性判断,只有if里面才是正常的处理流程,`else`分支是出错处理流程 //举例一:异常逻辑处理例子 Object obj = getObj(); if (obj != null) { //do something }else{ //do something 第二个例子不管type等于1,2还是其他情况,都属于业务的正常流程.对于这两种情况重构的方法

Python 编程语言要掌握的技能之一:编写条件分支代码的技巧

Python 里的分支代码 Python 支持最为常见的 if/else 条件分支语句,不过它缺少在其他编程语言中常见的 switch/case 语句. 除此之外,Python 还为 for/while 循环以及 try/except 语句提供了 else 分支,在一些特殊的场景下,它们可以大显身手. 下面我会从 最佳实践.常见技巧.常见陷阱 三个方面讲一下如果编写优秀的条件分支代码. 最佳实践 1. 避免多层分支嵌套 如果这篇文章只能删减成一句话就结束,那么那句话一定是“要竭尽所能的避免分支嵌

深入剖析php执行原理(4):函数的调用

本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节再根据这些op指令,来剖析php运行时的细节. 源码依然取自php5.3.29. 函数调用 回顾之前用的php代码示例: <?php function foo($arg1) { print($arg1); } $bar = 'hello php'; foo($bar); 在函数编译一章里已经分析过,