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   
}

Swift学习 (二)的更多相关文章

  1. Swift学习二

    // 定义枚举方式一 enum Season { // 每个case定义一个实例 case Spring case Summer case Fall case Winter } // 定义枚举方式二 ...

  2. swift学习二:基本的语法

    声明本文转载自:http://www.cocoachina.com/applenews/devnews/2014/0603/8653.html Swift是什么? Swift是苹果于WWDC 2014 ...

  3. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  4. iOS ---Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  5. Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  6. 今天开始Swift学习

    今天开始Swift学习  在此记录笔记  以备之后查阅! allenhuang

  7. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  8. 12套swift学习资源分享

    虽然objective-c编程语言在过去很长一段时间都是iOS应用开发的基础语言,且很多iOS开发者对其也深爱有佳,但是随着swift编程语言的问世,迅速发展为开发者追捧的语言.且今年伴随着swift ...

  9. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  10. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

随机推荐

  1. MLP多层感知机

    @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 转载:http://blog.csdn.net ...

  2. vue2 路由,运动

  3. Spring Cloud Eureka 注册中心高可用机制

    一.Eureka 正常工作流程 Service 服务作为 Eureka Client 客户端需要在启动的时候就要向 Eureka Server 注册中心进行注册,并获取最新的服务列表数据. Eurek ...

  4. c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式

    c++字符串声明:一种是声明字符数组并赋值,另一种是直接声明string类 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #incl ...

  5. QCheckBox 使用本地图片的QSS样式

    setStyleSheet 为以下字符串,选中,未选中,有焦点,无焦点时显示不一样的图片 QString("QCheckBox::indicator:unchecked{image:url( ...

  6. BZOJ3331 压力 (圆方树+树上差分)

    题意 略 题解 求路径上的割点. 然后就直接圆方树上差分 CODE #include <bits/stdc++.h> using namespace std; inline void rd ...

  7. Hadoop集群分布搭建

    一.准备工作 1.最少三台虚拟机或者实体机(官网上是默认是3台),我这边是3台 s1: 10.211.55.18 s2: 10.211.55.19 s3: 10.211.55.20 2.安装JDK 3 ...

  8. vue文件夹上传源码

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  9. Codeforces Round #583

    目录 Contest Info Solutions A. Optimal Currency Exchange B. Badges C. Bad Sequence D. Treasure Island ...

  10. P3066 [USACO12DEC] 逃跑的Barn 左偏树

    P3066 逃跑的Barn 左偏树 题面 题意:给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 注意到答案的两个性质: 一个点的所有答案一定包含在其所有儿子的答案中 如 ...