学习地址:http://www.rm5u.com/ 或 http://www.runoob.com/
- 如果创建的是 OS X playground 需要引入 Cocoa; 如果我们想创建 iOS playground 则需要引入 UIKit .
- iPhone或iTouch的宽为320像素,高为480像素,状态栏高为20像素,toobar高为44像素,tabbar高为49像素,导航栏高为44像素。
- typealias:类型别名对当前的类型定义了另一个名字;
- Swfit语言定义后缀?作为命名类型Optional(可选)的简写;
var optionalInteger: Int? //或者 var optionalInteger: Optional<Int>
- 强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。
var myString:String? myString = "Hello, Swift!" if myString != nil { // 强制解析 print( myString! ) } else { print("myString 值为 nil") }
注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
- 自动解析:你可以在声明可选变量时使用感叹号(!)替换问号(?)。
var myString:String! myString = "Hello, Swift!" if myString != nil { print(myString) } else { print("myString 值为 nil") }
- 可选绑定:使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
if let constantName = someOptional { statements } // example : var myString : String? myString = "Hello, Swift!" if let yourString = myString { print("你的字符串值为 - \(yourString)") } else { print("你的字符串没有值") }
- 整型字面量可以是一个十进制,二进制,八进制或十六进制常量。 二进制前缀为 0b,八进制前缀为 0o,十六进制前缀为 0x,十进制没有前缀
let decimalInteger = 17 // 17 - 十进制表示 let binaryInteger = 0b10001 // 17 - 二进制表示 let octalInteger = 0o21 // 17 - 八进制表示 let hexadecimalInteger = 0x11 // 17 - 十六进制表示
- 注意:Swift中的字母采用的是Unicode编码[1]。Unicode叫做统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号
如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`) - 浮点型字面量的默认推导类型为 Swift 标准库类型中的 Double,表示64位浮点数。
十进制浮点型字面量 :1.25e2 表示 1.25 ? 10^2,也就是 125.0;同样,1.25e-2 表示 1.25 ? 10^-2,也就是 0.0125。
十六进制浮点型字面量:0xFp2 表示 15 ? 2^2,也就是 60;同样,0xFp-2 表示 15 ? 2^-2,也就是 3.75。
eg: 浮点型字面量允许使用下划线 _ 来增强数字的可读性,下划线会被系统忽略,因此不会影响字面量的值。同样地,也可以在数字前加 0,并不会影响字面量的值。 - 字符串型字面量:
转移字符 含义 \0 空字符 \\ 反斜线 \ \b 退格(BS) ,将当前位置移到前一列 \f 换页(FF),将当前位置移到下页开头 \n 换行符 \r 回车符 \t 水平制表符 \v 垂直制表符 \‘ 单引号 \" 双引号 \000 1到3位八进制数所代表的任意字符 \xhh... 1到2位十六进制所代表的任意字符 - 位运算符:位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:
p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 指定 A = 0011 1100 ; B = 0000 1101
运算符 描述 图解 实例 & 按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。 (A & B) 结果为 12, 二进制为 0000 1100 | 按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。 (A | B) 结果为 61, 二进制为 0011 1101 ^ 按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。 (A ^ B) 结果为 49, 二进制为 0011 0001 ~ 按位取反运算符~对一个操作数的每一位都取反。 (~A ) 结果为 -61, 二进制为 1100 0011 in 2‘s complement form. << 按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。
下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。A << 2 结果为 240, 二进制为 1111 0000 >> 按位右移。右移操作符(<<)将操作数的所有位向又移动指定的位数。 下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
A >> 2 结果为 15, 二进制为 0000 1111 - 赋值运算:
运算符 描述 实例 = 简单的赋值运算,指定右边操作数赋值给左边的操作数。 C = A + B 将 A + B 的运算结果赋值给 C += 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 C += A 相当于 C = C + A -= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 C -= A 相当于 C = C - A *= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 C *= A 相当于 C = C * A /= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 C /= A 相当于 C = C / A %= 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 C %= A 相当于 C = C % A <<= 按位左移后再赋值 C <<= 2 相当于 C = C << 2 >>= 按位右移后再赋值 C >>= 2 相当于 C = C >> 2 &= 按位与运算后赋值 C &= 2 相当于 C = C & 2 ^= 按位异或运算符后再赋值 C ^= 2 相当于 C = C ^ 2 |= 按位或运算后再赋值 C |= 2 相当于 C = C | 2 - 区间运算符:
运算符 描述 实例 闭区间运算符 闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中: 1...5 区间值为 1, 2, 3, 4 和 5 半开区间运算符 半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。<="" td=""> 1..< 5 区间值为 1, 2, 3, 和 4 - 三目运算符:(
a ? b : c) -- 如果a为true,值为b,否则为c.
- 指针最优,单目运算优于双目运算。如正负号。
- 先乘除(模),后加减。
- 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
- 逻辑运算最后计算
运算符类型 运算符 结合方向 表达式运算 () [] . expr++ expr-- 左到右 一元运算符
* & + - ! ~ ++expr --expr* / %
+ -
>> <<
< > <= >=
== !=
右到左 位运算符
&^
|
&&
||
左到右 三元运算符 ?: 右到左 赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左 逗号 , 左到右 - 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 语句区别在于判断循环条件之前,先执行一次循环的代码块。 控制语句 描述
continue 语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
break 语句中断当前循环。
fallthrough 语句如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。 - Swift 字符串
创建字符串:你可以通过使用字符串字面量或 String 类的实例来创建一个字符串:import UIKit // 使用字符串字面量 var stringA = "Hello, World!" print( stringA ) // String 实例化 var stringB = String("Hello, World!") print( stringB )
空字符串:你可以使用空的字符串字面量赋值给变量或初始化一个String类的实例来初始值一个空的字符串。 我们可以使用字符串属性 isEmpty 来判断字符串是否为空:
import UIKit // 使用字符串字面量创建空字符串 var stringA = "" if stringA.isEmpty { print( "stringA 是空的" ) } else { print( "stringA 不是空的" ) } // 实例化 String 类来创建空字符串 let stringB = String() if stringB.isEmpty { print( "stringB 是空的" ) } else { print( "stringB 不是空的" ) }
字符串常量:你可以将一个字符串赋值给一个变量或常量,变量是可修改的,常量是不可修改的。
字符串中插入值:字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:import UIKit var varA = 20 let constA = 100 var varC:Float = 20.0 var stringA = "\(varA) 乘以 \(constA) 等于 \(varC * 100)" print( stringA )
字符串连接:字符串可以通过 + 号来连接。
字符串长度:字符串长度使用 String.characters.count 属性来计算
字符串比较:可以使用 == 来比较两个字符串是否相等
Unicode 字符串:Unicode 是一个国际标准,用于文本的编码,Swift 的 String 类型是基于 Unicode建立的。你可以循环迭代出字符串中 UTF-8 与 UTF-16 的编码,实例如下:import UIKit var unicodeString = "学习教程" print("UTF-8 编码: ") for code in unicodeString.utf8 { print("\(code) ") } print("\n") print("UTF-16 编码: ") for code in unicodeString.utf16 { print("\(code) ") }
字符串函数以及运算符:
序号 函数/运算符 & 描述 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计算字符串的长度
6
utf8您可以通过遍历 String 的 utf8 属性来访问它的 UTF-8 编码
7
utf16您可以通过遍历 String 的 utf8 属性来访问它的 UTF-16 编码
8
unicodeScalars您可以通过遍历String值的unicodeScalars属性来访问它的 Unicode 标量编码.
9
+连接两个字符串,并返回一个新的字符串
10
+=连接操作符两边的字符串并将新字符串赋值给左边的操作符变量
11
==判断两个字符串是否相等
12
<比较两个字符串,对两个字符串的字母逐一比较。
13
!=比较两个字符串是否不相等。
- Swift 字符(Character)
Swift 的字符是一个单一的字符字符串字面量,数据类型为 Character:import UIKit let char1: Character = "A" let char2: Character = "B" print("char1 的值为 \(char1)") print("char2 的值为 \(char2)")
注意:如果想在 Character(字符) 类型的常量中存储更多的字符,则程序执行会报错。
Swift 中不能创建空的 Character(字符) 类型变量或常量。
遍历字符串中的字符:Swift 的 String 类型表示特定序列的 Character(字符) 类型值的集合; 每一个字符值代表一个 Unicode 字符;您可通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值:import UIKit for ch in "Hello".characters { print(ch) }
字符串连接字符:使用 String 的 append() 方法来实现字符串连接字符:
import UIKit var varA:String = "Hello " let varB:Character = "G" varA.append( varB ) print("varC = \(varA)")
- Swift 数组
创建数组:
可以使用构造语法来创建一个由特定数据类型构成的空数组:
var someArray = [someType]()
创建一个初始化大小数组的语法:
var someArray = [someType](count: NumberofElements, repeatedValues: InitialValue)
创建一个类型为Int,大小为3,初始值为0的空数组:
var someInts = [Int](count: 3, repeatedValues: 0)
创建含有三个元素的数组:
var someInts:[Int] = [10,20,30]访问数组:我们可以根据数组的索引来访问数组的元素:
var someVar = someArray[index]修改数组:可以使用 append() 方法或者赋值运算符 += 在数组末尾添加元素,如下所示,我们初始化一个数组,并向其添 加元素,也可以通过索引修改数组元素的值。
遍历数组:可以使用for-in循环来遍历所有数组中的数据项,如果我们同时需要每个数据项的值和索引值,可以使用 String 的 enumerate() 方法来进行数组遍历:
import UIKit var someStrs = [String]() someStrs.append("Apple") someStrs.append("Amazon") someStrs.append("Runoob") someStrs += ["Google"] for (index, item) in someStrs.enumerate() { print("在 index = \(index) 位置上的值为 \(item)") }
合并数组:我们可以使用加法操作符(+)来合并两种已存在的相同类型数组。新数组的数据类型会从两个数组的数据类型中 推断出来。
Count属性:可以使用count属性来计算数组元素个数;isEmpty属性:可以通过只读属性 isEmpty 来判断数组是否为空,返回布尔值;
运算符优先级: