Swift中文教程(三)--流程控制

简介:   Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环。条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: 1 let individualScores = [75, 43, 103, 87, 12] 2 ...

  Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环。条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的:

 1 let individualScores = [75, 43, 103, 87, 12]
 2 var teamScore = 0
 3 for score in individualScores {
 4     if score > 50 {
 5         teamScore += 3
 6     } else {
 7         teamScore += 1
 8     }
 9 }
10 teamScore

  

  If语句

 

  在if语句中,条件必须是布尔值,也就是说,if score { ... }这个条件句是错误的,不是一个隐式地与0比较的条件。

  你可以结合if和let来防止这种值的丢失状况。这些值意味着可选,这种可选值要么包含一个具体的值要么包含一个nil(空)来指示它的值是不存在的。在值的类型后面加上?号来表示它为可选即可:

var optionalString: String? = "Hello"
optionalString == nil
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

练习:

将 optionalName 赋值为 nil 。会发生什么?添加一个 else 条件句在 optionalName 为 nil 时设置一个不同的值试试。

  一旦可选值为nil,条件为false时,花括号里的代码块将被跳过,否则,可选值将是未封装的并赋值给一个常量,这会让未封装的值在代码块作用域中可见。

  

  Switch语句

 

  Switch语句支持任何数据类型而且支持多种比较,不限于整型或相等测试:

 1 let vegetable = "red pepper"
 2 switch vegetable {
 3 case "celery":
 4     let vegetableComment = "Add some raisins and make ants on a log."
 5 case "cucumber", "watercress":
 6     let vegetableComment = "That would make a good tea sandwich."
 7 case let x where x.hasSuffix("pepper"):
 8     let vegetableComment = "Is it a spicy \(x)?"
 9 default:
10     let vegetableComment = "Everything tastes good in soup."
11 }

练习:

移除default语句,看看会报什么错?

  执行满足条件的case语句后,程序自动跳出,所以,无需给每个case语句加上break。

  

  For-In语句

 

  使用for-in循环在字典中遍历时,提供一对名字来使用字典中的每一个名值对(如下例的number--numbers):

 1 let interestingNumbers = [
 2     "Prime": [2, 3, 5, 7, 11, 13],
 3     "Fibonacci": [1, 1, 2, 3, 5, 8],
 4     "Square": [1, 4, 9, 16, 25],
 5 ]
 6 var largest = 0
 7 for (kind, numbers) in interestingNumbers {
 8     for number in numbers {
 9         if number > largest {
10             largest = number
11         }
12     }
13 }
14 largest

练习:

在上例中,添加一个变量来跟踪哪一个number是最大的,即最大的值是?

  

  

  While语句

 

  使用while语句来重复执行一个代码块直到条件改变。条件可以置于句末以便代码至少执行一次:

 

 1 var n = 2
 2 while n < 100 {
 3     n = n * 2
 4 }
 5 n
 6  
 7 var m = 2
 8 do {
 9     m = m * 2
10 } while m < 100
11 m

 

  For语句

 

  for循环中可以使用索引值,利用..(两个点)或者明确声明一个初始值,条件句或增量来限制索引的范围,下面的两个循环意思一样:

 1 var firstForLoop = 0
 2 for i in 0..3 {
 3     firstForLoop += i
 4 }
 5 firstForLoop
 6  
 7 var secondForLoop = 0
 8 for var i = 0; i < 3; ++i {
 9     secondForLoop += 1
10 }
11 secondForLoop

  使用 ..(两个点)限制索引的范围并忽略最高值,而用 ...(三个点) 构造的范围则包含两个值。

 

谢谢,Swifter-QQ群:362232993,同好者进~ 

github地址:https://github.com/Joejo/Swift-lesson-for-chinese

 

 

 

 

 

 

 

 

目录
相关文章
|
6天前
|
编译器 Swift iOS开发
Swift 教程
10月更文挑战第23天
7 1
|
6月前
|
IDE 开发工具 Swift
Swift语言的教程
Swift语言的教程
109 1
|
Swift iOS开发
Swift讲解专题六——流程控制
Swift讲解专题六——流程控制
112 0
|
iOS开发 Swift 编译器
使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程
使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程 转载地址:http://swift.gg/2016/06/28/adding-siri-to-ios-10-apps-in-swift-tutorial/ 下载 Xcode 8,配置 iOS 10 和 Swift 3 (可选)通过命令行编译 除非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变。
1844 0
|
编译器 Swift
Swift中文教程(七)--协议,扩展和泛型
Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): 1 class SimpleClass: E...
1221 0
|
编译器 Swift
Swift中文教程(五)--对象和类
       Class 类     在Swift中可以用class关键字后跟类名创建一个类。在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: 1 class Shape { 2 var numberO...
1168 0
Swift中文教程(六)--枚举和结构
Enumerations 枚举   使用 enum 来创建一个枚举。跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法)。 1 enum Rank: Int { 2 case Ace = 1 3 case Two, Three, ...
941 0
|
索引 Swift 机器学习/深度学习
Swift中文教程(三)--流程控制
原文:Swift中文教程(三)--流程控制   Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环。条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: 1 let individualScores = [75,...
737 0
|
编译器 Swift
Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值   Swift使用let关键字声明常量,var关键字声明变量。常量无需在编译时指定,但至少要被赋值一次。也就是说,赋值一次多次使用: 1 var myVariable = 42 2 myVariable = 50 3 let myConstant = 42 这里的常量赋值之后值不能更改,应该提高重用性。
718 0