swift学习笔记
2. 数组和字典
说明:swift中字典和数组都使用[],使用下标和key来访问元素,并且不像oc一样区别可变和不可变了
// 数组
var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water" // 直接改变元素的值
// 字典 键值对之间用','号分隔
var occupations - [
"Malcolm" : "Captain",
"Kaylee" : "Mechanic"
]
occupations["Jayne"] = "Public Relations"
创建空的字典和数组
let emptyArray = [String]()
let emptyDict = Dictionary<String, Float>()
3. 流程控制语句
使用 if 和 switch 来进行条件操作,使用 for-in、for、while 和 do-while 来进行循环。包裹条
件和循环变量括号可以省略,但是语句体的大括号是必须的
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores{
if score > 50{
teamScore += 3
} else {
teamScore += 1
}
}
在 if 语句中,条件必须是一个布尔表达式——像 if score { ... }这样的代码是错误的。
在 if 语句中,即使if后边的语句只有一句也要写{}
if语句右边可以用赋值表达式 但是=右边的必须是可选类型
正确的写法: 只有可选类型这个赋值表达式会返回bool结果
var tempStr: String? = "hello" // 可选类型
if let str1 = tempStr { // 只有可选类型这个赋值表达式会返回bool结果
println(str1)
}
错误的写法
var Age = 20 // 不是可选类型
if var oldAge = Age{
oldAge = Age
}
可选类型,一个可选的值可能试一个具体的值或者是nil,表示值缺失。在类型后边加上问号来标记这个变量的值是可选的
var optionalString : String? = "hello
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。
switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
var vegetableComment = "haha"
let vegetable = "redpepper"
switch vegetable{
case "celery":
vegetableComment = "Add some raisins and make ants on a log"
case "redpepper", "watercress":
vegetableComment = "hahaha"
case let x where x.hasSuffix("pepper"): // where 字句
vegetableComment = "red pepper"
default:
vegetableComment = "defalt"
}
println(vegetableComment)
通过改变vegetableComment的值可以看到switch的子句的强大
swift中的switch匹配代码case中:
- 可以同时匹配多值参数,就是一个case后边可以跟多个匹配条件,多个匹配条件的匹配结果是逻辑或运算的,也就是说:多参数中只要有一个和条件匹配了就算匹配成功.oc和java中一个case后边只能有一个匹配条件;
- swift有where子句,在case匹配条件中可以直接写表达式来匹配;
- 关于default的情况:只要case的匹配是exhaustive(详尽的),不然就必须有default
如果是一个枚举类型内部的switch case字句把所有的枚举都匹配过 这时可以不用default子句
总之,感觉swift是一种很安全和严谨的语言;特点
- 不能隐式的进行类型转换,java可以隐式转换,方便的同时也存在着潜在的危险
- 可选类型的存在将程序的逻辑判断和编译的任务整合到了语法中;
继续看while和do-while 还有for语句
你可以在循环中使用..来表示范围,也可以使用传统的写法,两者是等价的:
for i in 0..3 {
}
// 或者
for var i=0; i<3; i++{
}