循环(Loops)

1. For条件递增语句

  for ( var counter = ; counter < ; counter++ )
{
liftWeights( )
}

语法是这样的:用for作为循环的开始,告诉Xcode你要声明一个循环了,for后面跟着括号,括号里面声明变量、条件和递增数值。例如:

 for ( VARIABLE; CONDITION; INCREMENT )
{ }

括号中的第一个部分是变量,用counter表示,计算已经完成的循环的数量,在平时编写程序时,这里的变量常常命名为counter(英文中counter有计数器的含义)然后设定初始值为零:

 for ( var counter = ; CONDITION; INCREMENT )
{ }


条件后面的一个分号后面是递增值,递增值就是每次循环后变量counter的变化:

 for ( var counter = ; counter < ; counter++ )
{ }

 

然而苹果公司提供了简写方式,用两个加号++表示这个变量加1,例如:

counter++

作用和这个相同:

counter = counter +1

2. 区间(Ranges)

区间Range和整型数组中一个数字到另一个数字差不多,目前有两种区间,一种是闭区间,用三个小点表示,包含小点两边的数字:

...   //1,2,3,4,5

另外一种是半闭半开区间,用两个小点加上一个小于号表示,小于号右边的数字不包含在这个区间中:

..<     //1,2,3,4

在for-in循环中,可以使用区间来代替数组或者词典:

 for index in ...
{
println ("The current number is \(index)")
} //打印结果为:
//The current number is 1
//The current number is 2
//The current number is 3
//The current number is 4
//The current number is 5

3. 条件表达式

 if isBirthdayToday == true
{
singBirthdaySong ( )
}

  在上面的这个例子中,条件是isBirthdayToday == true,两个等号表示比较2个等号之间的数值,如果值相同,则结果为真,如果值不相同,则结果为假。

4. 可选类型(Optionals)

可选值是用来处理那些可能出现空值的变量。在某些情况下,你是无法确保一个变量是不是一定有值。例如,在西班牙语中的一个单词,可能无法直接翻译成英语的一个单词,这样就会出现空值。这种没有值的情况叫做nil。
可选值可以用在任何类型的变量中,在使用时将一个问号跟在类型后面,表示这是可选值:

 var translatedWord: String?

因为可能为空的变量都必须名称表示,这样能确保所有的非可选值变量都会有值。这种设计模式帮助开发者避免了空值引起的程序崩溃。非可选值变量都必须有值,可选值变量可以没有值。
可选值不能直接使用,在使用之前需要解包(unwrapped)。把使用可选值变量想象成拆开一袋糖果,必须先要把包装撕掉才能吃到糖果。当一个可选值变量解包后,这个变量也可能是空值。这就相当于你拆开一颗糖果,结果发现里面什么也没有。
解包的过程帮助开发者记住去检查然后确保这个变量不是空值,用可选值有2个步骤,第一步,检查是不是为空,一般情况下用if表达式检查:

 var translatedWord: String? = translate("cat")
if translatedWord != nil {
//translatedWord has a value
} else {
//The translatedWord has no value
}

一旦核查确实有值后,你必须解包。解包一个可选值非常简单,直接放一个叹号在变量后面即可,例如:
 var translatedWord: String? = translate("cat")
if translatedWord != nil {
println(translatedWord!) //gato
}

5. 枚举

  5.1声明一个枚举

  枚举声明的类型是囊括可能状态的有限集,且可以具有附加值。通过内嵌(nesting),方法(method),关联值(associated values)和模式匹配(pattern matching),枚举可以分层次地定义任何有组织的数据。
玩游戏的四个方向,如:
 enum Movement{
case Left
case Right
case Top
case Bottom
}

 let aMovement = Movement.Left

 // switch 分情况处理
switch aMovement{
case .Left: print("left")
default:()
} // 明确的case情况
if case .Left = aMovement{
print("left")
} if aMovement == .Left { print("left") }
  使用上述多种模式匹配结构获取到Movement的枚举值,或者按照特定情况执行操作。

  我们无须明确指出enum的实际名称(即case Move.Left:print("Left"))。因为类型检查器能够自动为此进行类型推算。这对于那些UIKit以及AppKit中错综复杂的枚举是灰常有用的。

  5.2 枚举值
  想要为enum中每个case分配一个值。这相当有用,比如枚举自身实际与某事或某物挂钩时,往往这些东西又需要使用不同类型来表述。在C语言中,你只能为枚举case分配整型值,而Swift则提供了更多的灵活性。
 // 映射到整型
enum Movement: Int {
case Left =
case Right =
case Top =
case Bottom =
}

  5.3获取枚举值

  倘若你想要读取枚举的值,可以通过rawValue属性来实现:


 // 同样你可以与字符串一一对应
enum House: String {
case Baratheon = "Ours is the Fury"
case Greyjoy = "We Do Not Sow"
case Martell = "Unbowed, Unbent, Unbroken"
case Stark = "Winter is Coming"
case Tully = "Family, Duty, Honor"
case Tyrell = "Growing Strong"
}

 //获取枚举值

 let bestHouse = House.Stark
print(bestHouse.rawValue)
  5.4通过一个已有的raw value来创建一个enum case。
  这种情况下,枚举提供了一个指定构造方法:
 enum Movement: Int {
case Left =
case Right =
case Top =
case Bottom =
}

 // 创建一个movement.Right 用例,其raw value值为1
let rightMovement = Movement(rawValue: )

  倘若使用rawValue构造器,切记它是一个可失败构造器(failable initializer)。换言之,构造方法返回值为可选类型值,因为有时候传入的值可能与任意一个case都不匹配。比如Movement(rawValue:42)。

参见:枚举中高级枚举实践


刚刚开始接触可选值的时候会有一些困惑和不习惯,其实你只要记住,一个可能为空的变量必须是可选值,而当可选值为空时就叫做nil。

Swift 了解(2)的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. 算法与数据结构(十七) 基数排序(Swift 3.0版)

    前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...

  5. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  6. Swift enum(枚举)使用范例

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  7. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  8. swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明

    关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...

  9. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  10. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

随机推荐

  1. GIt如何进行代码管理

    一:Git账号设置(仅第一次需设置): 1.首先打开GIt  Bash  界面

  2. PyCharm 常用习惯设置

    1.pycharm改变选中行时改行的颜色和光标所在行的颜色 1.是光标所在行的背景颜色,写代码,每写到这一行,就会是这种颜色,所以尽量改成和你代码背景颜色相近的 2.应该是旁边行号所在背景颜色 3.是 ...

  3. ef 数据库创建失败

    在ef之前创建了一个数据库,然后删除后,再用ef创建,失败! USE [master] GO /****** Object: Database [DBname] ******/ ALTER DATAB ...

  4. 误删除innodb ibdata数据文件

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  5. 20181226 PL/SQL批量生产处理语句

    总有那么些时候,对某些特定条件的数据需要做更新或者修改,或者Truncate特定的一些表,而你又不想要每一个表都去写Truncate table 语句. 那么可以采用Select 的拼接语句 如下: ...

  6. 数据库 - Navicat与pymysql模块

    一.Nabicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时, 可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:htt ...

  7. 001-js-时间格式化

    方法一. // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1 ...

  8. 轻量级ORM工具Simple.Data

    今天推举的这篇文章,本意不是要推举文章的内容,而是据此介绍一下Simple.Data这个很有意思的类ORM工具. 现在大家在.NET开发中如果需要进行数据访问,那么基本都会使用一些ORM工具,比如微软 ...

  9. mysql 解锁

    show OPEN TABLES where In_use > 0;show processlist;show status like 'Table%';show status like '%l ...

  10. 怎样使用EOS.JS的API

    https://medium.com/coinmonks/how-to-use-eosjs-api-1-770b037b22ad https://blog.csdn.net/mongo_node/ar ...