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)
}
  1. 弱制解包(自己起的。。。)
str2 = str2?.uppercaseStrig
str2 没有值的时候,这句话只会返回 nil,什么副作用也没有。有值的时候会返回 Optional(str) 3. 强制解包
str!.uppercaseStrig
这样做的话,如果 str 当前为 nil,则程序会崩溃。 如果你非得这么用,必须确保这个可选型变量有值。

不需要获取方法的可选型变量声明

var str: String!
定义的时候,把问号改成了叹号。获取的时候不再需要以上几种方法。但是注意,如果在获取的时候如果变量为 nil, 程序会崩溃。

© Xinyu 2014 - 2024