2.控制流:

主要有三种类型的语句

  • if,switch和新增的guard

  • for,while

  • break,continue

关于if

语句里的条件不再需要使用()包裹了。

1
2
3
4
let number = 23
if number < 10 {
    print("The number is small")
}

但是后面判断执行的的代码必须使用{}包裹住。

if 后面的条件必须为Boolean表达式

也就是不会隐式地与0进行比较,下面这种写法是错误的,因为number并不是一个boolean表达式,number != 0才是。

1
2
3
int number = 0
if number{
}

关于for

for循环在Swift中变得更方便,更强大。

得益于Swift新添加的范围操作符...与...<

我们能够将之前繁琐的for循环:

1
2
3
4
for (int i = 1; i <= 5; i++)
{
    NSLog(@"%d", i);
}

改写为:

1
2
3
for index in 1...5 {
    print(index)
}

虽然在《The Swift Programming Language》里面没有提到类似的用法,但是在Swift中我们也有优雅的方法办到。

1
2
3
for index in stride(from: 1, through: 5, by: 2) {
    print(index)
}// through是包括5

然后对字典的遍历也增强了.在Objective-c的快速枚举中我们只能对字典的键进行枚举。

1
2
3
4
NSString *key;
for (key in someDictionary){
     NSLog(@"Key: %@, Value %@", key, [someDictionary objectForKey: key]);
}

而在Swift中,通过tuple我们可以同时枚举key与value:

1
2
3
4
let dictionary = ["firstName":"Mango","lastName":"Fang"]
for (key,value) in dictionary{
    print(key+" "+value)
}

关于Switch:

Swich在Swift中也得到了功能的增强与安全性的提高。

不需要Break来终止往下一个Case执行

也就是下面这两种写法是等价的。

1
2
3
4
5
6
7
8
9
let character = "a"
switch character{
    case "a":
        print("A")
    break
    case "b":
        print("B")
    break
default: print("character")
1
2
3
4
5
6
7
let character = "a"
switch character{
    case "a":
        print("A")
    case "b":
        print("B")
default: print("character")

这种改进避免了忘记写break造成的错误,自己深有体会,曾经就是因为漏写了break而花了一段时间去debug。

如果我们想不同值统一处理,使用逗号将值隔开即可。

1
2
3
4
switch some value to consider {
case value 1,value 2:
    statements
}

在Swift中,Switch支持的类型大大的拓宽了。

这意味在开发中我们能够能够对字符串,浮点数等进行匹配了。

之前在OC繁琐的写法就可以进行改进了:

1
2
3
4
5
6
7
8
9
if ([cardName isEqualToString:@"Six"]) {
    [self setValue:6];
else if ([cardName isEqualToString:@"Seven"]) {
    [self setValue:7];
else if ([cardName isEqualToString:@"Eight"]) {
    [self setValue:8];
else if ([cardName isEqualToString:@"Nine"]) {
    [self setValue:9];
}
1
2
3
4
5
6
7
8
9
10
switch carName{
    case "Six":
        self.vaule = 6
    case "Seven":
        self.vaule = 7
    case "Eight":
        self.vaule = 8
    case "Night":
        self.vaule = 9   
}

最新文章

  1. 通过navigationController跳转界面时隐藏navigationBar上的元素
  2. webpack配置es6开发环境
  3. 内存管理_深入剖析volatile关键字
  4. PHP Warning: Module &#39;modulename&#39; already loaded in Unknown on line 0
  5. Android之Activity的几种跳转方式
  6. 为什么使用开源软件(Open Source Software)
  7. 新手留言薄asp.net MVC 学习(适合新手学习)
  8. MongoDB入门分享-笔记整理精选
  9. C#开发的进化史
  10. 解决手机浏览器和微信中select中border:none;无用和去掉小三角
  11. Ansible性能调优
  12. 【nowcoder】 4th T2 区间
  13. 微信小程序 拖动图片一边进行截取
  14. android修改getprop读取到的ro.build.fingerprint属性
  15. LabVIEW(十四):VI属性
  16. linux系统管理 vi编辑器
  17. 入门NodeJS
  18. Objective-C 入门笔记
  19. C#基础第四天-作业-Hashtable-list&lt;KeyValuePair&gt;泛型实现名片
  20. DEXSeq

热门文章

  1. Java8新特性--函数式编程
  2. 「数据结构与算法之链表(Python)」(四)
  3. Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)
  4. Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  5. ZooInspector使用
  6. LOJ P10149 凸多边形的划分 题解
  7. 三十二. 多表查询 MySQL管理工具 、 用户授权及撤销
  8. URL中的String参数问题
  9. PCIe - 周扒皮,扒扒TLP层
  10. 配置Jupyter Notebook