Learn Swift Pt. 1
变量和常量
var
来修饰变量,let
修饰常量Swift 采取类型推倒,在定义变量时如果已知变量的类型时不需要写类型。不过不用担心,Swift 是一门静态类型的语言,在编译的时候也做类型检察的。
字符串
用
var
定义的字符串都是可变的,类似于 Objective-C 中的 NSMutableString,但是比它好在可以直接采用 +
来连接字符串。如果你想让字符串不可更改,请定义成
let
Swift 中的字符串都是 value 类型的。当你把字符串赋值给变量或者当参数传入函数时,它的值会被拷贝。
数值类型
var r = 10
let pi = 3.14
var area = r * r * pi
这样做是不行的。Swift 中,所有的数字类型必须得是显示的转换。所以你得这么 干:
var area = Double(r) * Double(r) * pi
这里是构造的新的 Double 类型变量,类似于 C 中的强制转换,真实的 r 还是 Int 类型的。
布尔类型
判断的条件只能够使用布尔类型,Swift 不会把大于0的值当做 true。
元组(Tuples)
元组是一个可以包含多种类型的集合类型,所以定义元组的时候可以不需要指定类型(当然你可以指定类型)。
var tup = ("abc", 123, true)
访问元组元素的时候可以这样:
tup.0
var dinner = (people: 3, place: "香格里拉")
这是为元组的元素起了名字,获取元素的时候就可以
dinner.people
这样了。数组
存储有序集合的类型
//定义一个数组:
var array = [1, 2, 3, 4, 5]
//获取第二个元素
array[1]
//定义一个可以存储任何类型的数组
var awesomeArray: [AnyObject] = [123, 1.231, "asd"]
字典
字典是一个能够存储键值和值映射关系的集合。
//定义一个字典
var dic = [1.5: "One", 2: "Two"]
//当然字典也可以规定存储的类型
var diction: [Int:String] = [1: "One", 2: "Two"]
//通过键值寻找值
dic[1.5]
流程控制
for 循环
for i in 1...5 {
println(i)
}
类似于 Python 中的 for-in 循环,1…5 表示一个范围,是 Range 类型的,前后都包括,所以循环5遍。
当然也可以用 for-in 来遍历一个字符串。
for c in "Swift" {
println(c)
}
while 循环
Swift 支持 while 和 do-while 循环。跟 C 中类似,知识语法稍有不同(少个括号)。
var i = 0
while i < 100 {
println(i)
++i
}
if 和 switch
if 没什么好说的,对于 switch 可以谈谈。 Swift 中的 switch 必须有 default ,还有 switch 不需要加 break。
var score = 59
switch score {
case 1...59:
println("Failed!")
case 60...100:
println("Pass!")
default:
printin("NB!")
}
可选型(Optionals)
Swift 不允许在编译的时候定义未初始化的变量。如果你有一个 String 类型的变量,你在运行之前不知道它是什么,该怎么办呢?把它设置成 nil(
var str: String = nil
)? 同样,Swift 是不允许的,因为 nil 不是 String 类型的。这时候 optional 就派上用场了。 optional 的意思是,这个变量可能有值,也可能没有值。 ##### 声明var str1: String?
var str2: String? = “This is Optional”
这两种都可以。
获取
当调用可选型变量的成员方法时,有两种方法: 1. 解包
if let unwrappedStr = str {
//str 有值的时候才会进入
println(str.uppercaseString)
}
- 弱制解包(自己起的。。。)
str2 = str2?.uppercaseStrig
当
str2
没有值的时候,这句话只会返回 nil,什么副作用也没有。有值的时候会返回 Optional(str)
3. 强制解包str!.uppercaseStrig
这样做的话,如果 str 当前为 nil,则程序会崩溃。 如果你非得这么用,必须确保这个可选型变量有值。
不需要获取方法的可选型变量声明
var str: String!
定义的时候,把问号改成了叹号。获取的时候不再需要以上几种方法。但是注意,如果在获取的时候如果变量为 nil, 程序会崩溃。