1、使用 let 来声明常量,使用 var 来声明变量。
注:你能够在一行中声明多个常量或者多个变量。用逗号隔开。
2、类型标注
假设初始值没有提供足够的信息(或者没有初始值),那你须要在变量后面声明类型,用冒号切割。
let variable: String
注意:一般来说你非常少须要写类型标注。
假设你在声明常量或者变量的时候赋了一个初始值,Swift能够判断出这个常量或者变量的类型。
3、输出函数println 和 print
println:是一个用来输出的全局函数,输出的内容会在最后换行。
print:唯一差别是在输出内容最后不会换行。
4、把值转换成字符串
有一种更简单的把值转换成字符串的方法:把值写到括号里,而且在括号之前写一个反斜杠。
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
5、凝视
单行凝视://
多行凝视:/* */
6、浮点数
Double:表示64位浮点数。
当你须要存储非常大或者非常高精度的浮点数时请使用此类型。
Float:表示32位浮点数。精度要求不高的话能够使用此类型。
7、类型别名
类型别名(type aliases)就是给现有类型定义还有一个名字。你能够使用 typealias keyword来定义类型别名。
比如:当你想要给现有类型起一个更有意义的名字时,类型别名很实用。如果你正在处理特定长度的外部资源的数据:
typealias AudioSample = UInt16
var minFound = AudioSample.min
var maxFound = AudioSample.max
8、创建元组 tuples
元组(tuples)把多个值组合成一个复合值。元组内的值能够使随意类型,并不要求是同样类型。
比如:let http404Error = (404, "Not Found")
9、元组内容的分解
能够将一个元组分解成单独的常量和变量使用。
let (statusCode, statusStr) = http404Error
假设你仅仅须要一部分元组值,分解的时候能够把要忽略的部分用下划线(_)标记。
let (justTheStatusCode, _) = http404Error
你还能够通过下标来訪问元组中的单个元素,下标从零開始。
var code = http404Error.0
var msg = http404Error.1
10、可选值 optionals 的强制解析
一个可选的 Int 被写作 Int?而不是 Int,它表示这个整形变量可能有值,或者可能为nil(沒值)。
你能够使用 if 语句来推断一个可选是否包括值。假设可选有值,结果是 true;假设没有值,结果是 false。
可选值的强制解析:当你知道可选确实包括值后,则能够在可选的名字后面加上一个感叹号(!)来获取值。
11、nil
这个表示没有值的意思。
假设你声明一个可选常量或者变量可是没有赋值,它们会自己主动被设置为 nil:
var surveyAnswer: String?
注意:nil 不能用于非可选的常量和变量。假设你的代码中有常量或者变量须要处理值缺失的情况,请把它们声明成相应的可选类型。
12、 隐式解析可选
有时候在程序架构中,第一次被赋值之后,能够确定一个可选总会有值。在这样的情况下,每次都要推断和解析可选值是很低效的,由于能够确定它总会有值。
这时我们就能够使用隐式解析可选。仅仅须要把后面的 ? 改成 ! 就可以。
13、隐式可选和可选的取值差别
let possibleString: String?
= "An optional string."
println(possibleString!) // 须要惊叹号来获取值
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // 不须要感叹号
注意:假设一个变量之后可能变成 nil 的话请不要使用隐式解析可选。假设你须要在变量的 生命周期中推断是否是 nil 的话,请使用普通可选类型。
14、断言
有时候假设缺少某些条件。我们不想让代码继续运行下去,就能够使用断言(assertion)。
断言会推断一个逻辑条件是否为true,假设是true则执行下去。否则就中止执行。
使用assert函数来写断言。比如:
let age = -3
assert(age >= 0, "a person‘s age can not less than 0”)
由于age >= 0 为false, 则断言触发,中止执行。
15、何时使用断言
- 整数的附属脚本索引被传入一个自己定义附属脚本实现,可是下标索引值可能太小或者太大。
- 须要给函数传入一个值,可是非法的值可能导致函数不能正常运行。
- 一个可选值如今是nil,可是后面的代码执行须要一个非 nil 值。
注意:断言可能导致你的应用终止执行,所以你应当细致设计你的代码来让非法条件不会出现。然而,在你的应用公布之前,有时候非法条件可能出现,这时使用断言能够高速发现问题。
16、创建数组和字典
使用方括号[ ]来创建数组和字典,并使用下标或者键(key)来訪问元素。
var shoppingList = [" catfish", "water", " tulips", "blue paint"]
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
17、创建空数组和字典
假设类型信息能够被判断出来,你能够用[]和[:]来创建空数组和空字典——就像你声明变量或者给函数传參数的时候一样。
18、负数求余
在对负数 -b 求余时, -b的符号会被忽略. 这意味着 a % b 和 a % -b的结果是同样的.
19、闭区间运算符
闭区间运算符 a...b 定义一个包括从 a 到 b (包括 a 和 b)的全部值的区间。
20、半闭区间运算符
半闭区间 a..<b 定义一个从 a 到 b 但不包含 b 的区间. 之所以称为半闭区间, 是由于该区间包含第一个值而不包含最后的值。
方便的使用于数组,比如:
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
println("第 \(i + 1) 个人叫 \(names[i])")
}
21、字符串字面量
代码中包括一段提前定义的字符串值作为字符串字面量,它能够包括以下的特殊字符:
1.转义特殊字符 \0 (空字符)、\\(反斜线)、\t (水平制表符)、\n (换行符)、\r (回车符)、\" (双引號)、\‘ (单引號)。
2.单字节 Unicode 标量。写成 \xnn,当中 nn 为两位十六进制数。
3.双字节 Unicode 标量,写成 \unnnn,当中 nnnn 为四位十六进制数。
4.四字节 Unicode 标量,写成 \Unnnnnnnn,当中 nnnnnnnn 为八位十六进制数。
22、字符串空属性推断
var str = ""
str.isEmpty //true
23、 countElements 函数
通过调用全局 countElements 函数。并将字符串作为參数进行传递能够获取该字符串的字符数量。
var str = "andy is a good guy"
countElements (str)
24、字符串插值
插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号里。
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
25、字符串比較
Swift 提供了三种方式来比較字符串的值:字符串相等,前缀相等和后缀相等。
(1)字符串相等:即使用 == 来比較字符串
(2)前缀/后缀相等:通过调用字符串的 hasPrefix/hasSuffix 方法来检查字符串是否拥有特定前缀/后缀。它会返回一个Boolean值。
26、字符串大写和小写
您能够通过字符串的 uppercaseString 和 lowercaseString 属性来訪问一个字符串的大写/小写版本号。
27、数组的类型标注
Swift 数组应该遵循像Array<SomeType>这种形式。当中sometype是这个数组中唯一同意存在的数据类型。 我们也能够使用像SomeType[]这种简单语法(推荐)。
假设我们创建了一个String 值类型的数组,我们不能往当中插入不论什么不是String 类型的数据。 Swift 中的数组是类型安全的。而且它们中包括的类型必须明白。
var shoppingList: String[] = ["Eggs", "Milk"]
由于Swift有类型判断。 所以当我们拥有同样类型的数组值时,我们能够写成:var shoppingList = ["Eggs", "Milk"]
28、创建空数组
创建特定数据类型的空数组,比如创建Int类型的空数组。
var someInts = Int[]()
29、数组的属性和方法
(1)count属性:获得数组中数据的数量。
(2)isEmpty属性:检查数组是否存在值。
(3)append / += 方法:我们能够使用append方法或者 += 运算符在数组后面加入数据项。
比如:shoppingList.append("Flour") 或者 shoppingList += "Baking Powder" 或者 shoppingList += [ "Cheese", "Butter"]
(4)insert(atIndex:)方法:在某个详细索引值之前加入数据项。
比如:shoppingList.insert("Maple Syrup", atIndex: 0)
(5)removeAtIndex()方法:移除数组中的某一项。这种方法把数组在特定索引值中存储的数据项移除而且返回这个被移除的数据项。
比如:let mapleSyrup = shoppingList.removeAtIndex(0)
(6)removeLast()方法:移除数组中最后一项并返回其值。
30、利用下标改变一系列数据值
即使新数据和原有数据的数量是不一样的。
以下的样例把"Chocolate Spread"。"Cheese",和"Butter" 替换为"Bananas"和 "Apples":
shoppingList[4...6] = ["Bananas", "Apples"]
31、数组遍历
一般来说,for-in循环就可以,可是假设我们须要每一个数据项的值和索引,则须要使用全局 enumerate 函数来进行数组遍历,比如:
for (index, value) in enumerate(shoppingList) {
...
}
32、创建特定大小,数据默认的Array
// threeDoubles 是一种 Double[]数组, 等于 [0.0, 0.0, 0.0]
var threeDoubles = Double[](count: 3, repeatedValue:0.0)
由于我们Swift有类型判断的存在,所以在使用这样的构造方法的时候不须要指明数据类型,由于从value中我们就知道了数据的类型:
var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)
33、字典
字典是一种存储同样类型多重数据的存储器。每一个值(value)都关联独特的键(key)。键作为字典中的这个值数据的标识符。
注:在某个特定字典中能够存储的键和值必须预定义清楚。方法是通过显性类型标注或者类型判断。
Swift 的字典使用Dictionary<KeyType, ValueType>定义,当中KeyType是字典中键的数据类型。ValueType是字典中相应于这些键所存储值的数据类型。
比如:var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]
和数组一样,假设我们使用字面语句构造字典就不用把类型定义清楚。
airports的也能够用这样的方法简短定义:
var airports = ["TYO": "Tokyo", "DUB": "Dublin"]
34、字典的方法和属性
基本和数组一样,都有类似的方法和属性,而且特别存在例如以下:
(1)updateValue(forKey:)方法:在这个键不存在相应值的时候设置值或者在存在时更新已存在的值,这种方法返回更新值之前的原值。这样方便我们检查更新是否成功。
(2)removeValueForKey(KeyName)方法:在键值对存在的情况下会移除该键值对而且返回被移除的value或者在没有值的情况下返回nil。
35、移除键值对
我们能够对某个键相应值赋予nil来移除这个键值对。
airports["APL"] = nil
36、字典遍历
使用for-in就可以:
for (airportCode, airportName) in airports {
...
}
37、字典的keys 或 values 属性
这些属性代表一个字典的全部key 或 value 的集合。
for airportCode in airports.keys {
...
}
for airportName in airports.values {
....
}
38、将键 或 值构造成一个新数组
let airportCodes = Array(airports.keys)
// airportCodes is ["TYO", "LHR"]
let airportNames = Array(airports.values)
// airportNames is ["Tokyo", "London Heathrow"]
39、创建一个空字典
var namesOfIntegers = Dictionary<Int, String>()
注:假设上下文中存在了空字典的字面语句,比如:namesOfIntegers[16] = "sixteen" ,则我们能够使用 namesOfIntegers = [:] 来定义一个Int, String类型的空字典。