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中:

  1. 可以同时匹配多值参数,就是一个case后边可以跟多个匹配条件,多个匹配条件的匹配结果是逻辑或运算的,也就是说:多参数中只要有一个和条件匹配了就算匹配成功.oc和java中一个case后边只能有一个匹配条件;
  2. swift有where子句,在case匹配条件中可以直接写表达式来匹配;
  3. 关于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++{
    
    
}
posted @ 2014-11-12 15:36  随遇不安  阅读(273)  评论(0编辑  收藏  举报