swift笔记-if语句

//1.基本使用

let num = 23

if num > 10 {

print("num is big")

}else if num < 0 {

print("num is fushu")

}else{

print("num is mid")

}

swift中,if后面跟的条件语句必须是boolType表达是,像在OC中的if(num)在swift中便不能使用了

2.if let的理解

var optionalName: String? = nil

var greeting = "Hello!"

if let name = optionalName {

greeting = "Hello!!!\(name)"

}

这段语句中的if let...,让我困惑了很久

  为什么if后面要用 let name = optionalName   而不直接用 optionName != nil来表示?

  var optionalName: String? = nil

  var greeting = "Hello!"

  if optionalName != nil {

  greeting = "Hello!!!\(name)"

  }

在stackOverflow上看到一个解释,觉得比较合理。链接http://stackoverflow.com/questions/24004443/reason-for-assigning-optional-to-new-variable-in-conditional-statement-in-swift

他的解释是:1.if-let 结构可以让你获取到一个确定的值(非nil),避免崩溃掉,因为swift是一门非常明确的语言,这样可以避免由于开发者没有考虑到所有的情况而出错的可能。2.举例如下:

var optionalName: String? {

get {

if checkTouchID() {

print("get optionalName")

return "John Appleseed"

} else {

return nil

}

}

}

var greeting = "Hello!"

if optionalName != nil {

greeting = "Hello, \(optionalName)"

}

在这段代码中,由于声明了optionalName的getter方法,故而在 if optionalName != nil  和 greeting = "Hello, \(optionalName)"都有调用optionalName的getter方法,也就是getter方法执行了2次,这样的话在实际开发中会有一些问题,例如getter方法是从网络获取,或者getter方法中执行支付操作,执行2次就不合理了。

所以如果换成if-let结构,就不会有这个问题了

时间: 2024-10-25 08:07:29

swift笔记-if语句的相关文章

swift 笔记 (二十) —— 泛型

泛型 泛型是为了解决在针对不同数据类型,而做了同一种功能的操作导致的每个类型我们都要写一份代码的问题. 有了泛型,我们可以只写一份逻辑代码,而适应于不同的数据类型. func swapInt(inout num1:Int, inout num2: Int) { var tmp = num1 num1 = num2 num2 = tmp } func swapDouble(inout num1: Double, inout num2:Double) { var tmp = num1 num1 =

swift 笔记 (十六) —— 可选链

可选链(Optional Chaining) 我们都知道"可选型"是什么,那么可选链又是什么,举个例子解释一下: struct MyName{ var name } struct MyInfo { var myName:MyName? = MyName() } class MyClass { var structInstance: MyInfo? = MyInfo() } 这里有两个结构体和一个类,当,这个类实例化的时候: var myInstance = MyClass() 所有的可

swift笔记- 枚举

枚举是一系列相关值的通用类型,是类型安全的. Swift中的枚举不需要为每一个成员赋值,而成员的值可以是 字符串 字符 或者人意的整数或浮点值. 枚举成员可以指定任何存储成员值类型的关联值enumeration members can specify associated values of any type to be stored along with each different member value.枚举成员可以是相关的成员集合,而每个成员也可以是一个单独的小集合. 枚举跟传统的类结

swift 笔记 (十三) —— 继承

继承 一个类可以从其它类继承方法,属性以及一些特征.被继承的类叫父类,那另一种就是子类了..这个我们都懂的.. 这是一个官方给的例子,它是一个基类(Base Class),因为它没有继承任何一个类,这个类里面有一个init方法,我们暂时忽略,只要知道这是个初始化方法,在我们创建一个类的实例的时候,这个方法会被执行,下一篇笔记会详细分析. class MyCar: Vehicle {          //继承的语法 init () {                              /

Swift 控制传递语句

控制传递语句(Control Transfer Statements) 控制转移语句改变你代码的执行顺序,通过它你可以实现代码的跳转.Swift有四种控制转移语句. continue break fallthrough return 我们将会在下面讨论continue.break和fallthrough语句.return语句将会在函数章节讨论. Continue continue语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代.就好像在说"本次循环迭代我已经执行完了",但是

swift 笔记 (十四) —— 构造过程

构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们通常会定义一个方法来完成,这个方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作以及一此自定义化的处理. 为存储型属性设置初始值 类和结构体在生成实例那一刻,必须为所有的属性赋以特定的初始值. 要么在定义存储型属性的时候直接给个初始值,否则就必须在构造器里面指定一个初始值. 上面说的这两种情况,都不会触发存储型属性的监听者行为(property observer). struc

swift笔记1-点语法

? 1 2 3 4 5 6 var firstForLoop = 0 for i in 0...3 {     firstForLoop += i     i } firstForLoop 1 两个点代表是左闭右开 即0,1,2 2 三个点代表全集合 即0,1,2,3 ? 1 2 3 4 5 6 7 func sumOf(numbers: Int...) -> Int {     var sum = 0     for number in numbers {         sum += num

swift 笔记 (十九) —— 协议

协议(Protocols) 协议仅是用定义某些任务或者是功能必须的方法和属性.类似于java里的interface的作用.但协议并不会实现具体的功能. 我猜这个名字源于OO中提到的"契约",但我并不觉得这名字很好,反而是interface这名字更容被接受,因为我觉得协议这个名字很容易和网络编程的时候的网络协议搞混,网络协议也通常简称为协议. 语法: protocol MyProtocol { //协议定义 } struct MyStruct: MyProtocol1, MyProtoc

Swift的Guard语句

转自:http://www.jianshu.com/p/3a8e45af7fdd 本篇文章翻译自:http://ericcerney.com/swift-guard-statement/原作者:ecerney原文章发布于2015-06-10*译者注:该语法为swift2.0新特性,目前(2015-07-30)仅xcode 7 beta支持,xcode6并不支持. 最开始在Apple的Platform State of the Union看见swift的guard语句的时候,我当时不太理解以后会有