Swift学习笔记(一)

Swift 对空格有要求。

Swift数据类型

类型别名

typealias,对当前类型定义另一个名字。typealias newStr = String

类型安全

type safe,Swift会在编译代码时进行类型检查(type checks)

类型推断

如果没有显示指定类型,Swift会使用类型推断(type inference)来选择合适的类型。浮点数会优先推断为Double。

Swift可选类型

Swift使用 ? 作为命名类型Optional的简写,Optional是一个含有两种情况的枚举,None和Some(T),用来表示可能或可能没有值。任何类型都可以声明或隐式转换为可选类型,声明时要确保给操作符一个合适的范围。类型和?之间没有空格。以下两种方式等价。

var optionalInt: Int?
var optionalInt2: Optional<Int>

声明可选变量如未给定初始值,默认为nil。

强制解析

当使用操作符声明时,如果确定可选类型包含值一个非nil值,可以在变量后面加上!来强制解析(forced unwrapping)。如果值为nil则会导致运行时错误。

自动解析

声明可选变量时,使用!替换,这样在解析可选变量时就可以不用加上!,以实现自动解析。

可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值复制给一个临时常量或变量。eg:

// 可选绑定
if let myInt = optionalInt {
    print(myInt)
}

Swift 常量

Swift常量使用关键字let声明,必须初始值。let constantName = <initial value>

类型标注

声明一个常量或者变量时候可以选择加上类型标注(type annotation),用于说明常量或者变量中要存储的值的类型。使用方法为在常量或者变量后加上冒号空格,然后加上类型名称。 var constantName: <data type> = <optional initial value>

输出

Swift中使用print替换了原来的println函数来输出常量和变量。在字符串中可以使用\()来插入常量和变量。

Swift字面量

字面量:能够直接了当的指出自己的类型并为变量进行赋值的值,如整型字面量、浮点型字面量、字符串型字面量和布尔型字面量。

字符串型字面量的转义

转义字符 含义
\0 空字符
\\ 反斜线 \
\b 退格(BS) ,将当前位置移到前一列
\f 换页(FF),将当前位置移到下页开头
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\' 单引号
\" 双引号
\000 1到3位八进制数所代表的任意字符
\xhh... 1到2位十六进制所代表的任意字符

布尔型字面量默认类型为Bool,包含三个值:true , false , nil

Swift运算符

运算符是一个符号,用户告诉编译器执行一个数学或逻辑运算。包含

Swift条件语句

语句描述
if 语句
if 语句由一个布尔表达式和一个或多个执行语句组成。
if...else语句 if 语句 后可以有可选的 else 语句, else 语句在布尔表达式为 false 时执行。可用`?:`代替
if...else if...else 语句 if 后可以有可选的 else if...else 语句, else if...else 语句常用于多个条件判断。
内嵌 if 语句 你可以在 if 或 else if 中内嵌 if 或 else if 语句。
switch 语句 switch 语句允许测试一个变量等于多个值时的情况。

Swift循环

循环类型

循环类型描述
for-in 遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。
for 循环 用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。
while 循环 运行一系列语句,如果条件为true,会重复运行,直到条件变为false。
**repeat...while 循环** 类似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。类似于do...while。

循环控制语句

控制语句 描述
continue 语句 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
break 语句中断当前循环。
**fallthrough 语句** 如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。

Swift字符串

Swift字符串类型为String

字符串创建

var stringA = "I`m string" // 字面量创建
var stringB = String("I`m string too") // String实例化,不推荐

空字符串

创建空字符串:

var stringA = "" // 字面量创建
var stringB = String() // String实例化创建

isEmpty可用来判断字符串是否为空!

字符串连接

字符串可通过+来连接

字符串长度

字符串可通过String.characters.count属性来计算

字符串比较

字符串通过==来比较是否相等

字符串函数和运算符

序号 函数/运算符 & 描述
1 isEmpty 判断字符串是否为空,返回布尔值
2 hasPrefix(prefix: String) ,检查字符串是否拥有特定后缀
3 hasSuffix(suffix: String) ,检查字符串是否拥有特定后缀。
4 Int(String) ,转换字符串数字为整型。 实例: `let myString: String = "256" let myInt: Int? = Int(myString)`
5 String.characters.count ,计算字符串的长度
6utf8 ,您可以通过遍历 String 的 utf8 属性来访问它的 UTF-8 编码
7 utf16 ,您可以通过遍历 String 的 utf8 属性来访问它的 UTF-16 编码
8 unicodeScalars 您可以通过遍历String值的unicodeScalars属性来访问它的 Unicode 标量编码.
9 + 连接两个字符串,并返回一个新的字符串
10 += 连接操作符两边的字符串并将新字符串赋值给左边的操作符变量
11 == 判断两个字符串是否相等
12 < 比较两个字符串,对两个字符串的字母逐一比较。
13 != 比较两个字符串是否不相等。

swift字符

Swift字符数据类型为Character.Swift无法创建空的Character类型的变量或常量。

遍历字符串中的字符

for ch in "I`m string".characters {
    print(ch)
}

字符串连接字符

可以使用String的append(c: Character)来连接字符

var char: Character = "A"
stringA.append(char)
print(stringA)

Swift数组

Swift中数组的数据类型为Array,使用有序列表存储同一类型的多个值。Swift中的数组元素类型没有限制。

创建数组

var emptyArray = [someType]() // 空数组
var sizeArray = [someType](count: 3, repeatedValue: 0) // 大小为3,初始值为0的数组
var someArray = [1,2,3] // 直接创建

访问数组

根据数组的索引来访问数组的元素。var someVar = someArray[index]

使用count属性来计算数组元素个数

使用isEmpty属性判断数组是否为空,返回布尔值。

修改数组

遍历数组

合并数组

使用+来合并两种相同类型的数组。新数组的类型会从两个数组的数据类型中推断出来。

Swift字典

Swift字典用来存储无序的相同类型数据的集合。Swift中的Key和Value的类型没有限制。

创建字典

与数组相似。

var emptyDict = [keyType : valueType]() // 空字典
var someDict: [Int : Int] = [1:11, 2: 22] // 字典实例

访问字典

通过字典的索引Key来访问数组元素。var someVar = someDict[key]

使用只读属性count计算字典有多少键值对

使用只读属性isEmpty属性来判断字典是否为空,返回布尔值。

修改字典

移除Key-Value

遍历字典

for (key , value) in someDict {
    print("\(key):\(value)")
}

for (index , value) in someDict.enumerate() {
    print("\(index):\(value)")
}

字典转换为数组

提取字典的键值,并转换为独立的数组。

let arrayKeys = [Int](someDict.keys)
let arrayValues = [Int](someDict.values)

参考:

[Swift 教程 菜鸟教程](http://www.runoob.com/swift/swift-tutorial.html)