Skip to content

swift语言篇

cheyiliu edited this page Jun 28, 2016 · 10 revisions

swift语言篇

Swift 初见(A Swift Tour)

  • 全局作用域中的代码会被自动当做程序的入口 点,所以你也不需要 main() 函数。你同样不需要在每个语句结尾写上分号。

简单值

  • 使用 let 来声明常量,使用 var 来声明变量。一个常量的值,在编译的时候,并不需要有明确的值,但是你只能 为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。
  • 你不用明确地声明类型,声明的同时赋值的话,编译器 会自动推断类型。
  • 值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。let width = 94; let widthLabel = label + String(width)
  • 有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。let apples = 3; let appleSummary = "I have (apples) apples."
  • 使用方括号 [] 来创建数组和字典,并使用下标或者键(key)来访问元素。最后一个元素后面允许有个逗号。

var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
   "Malcolm": "Captain",
   "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
要创建一个空数组或者字典,使用初始化语法。
let emptyArray = [String]()
let emptyDictionary = [String: Float]()
如果类型信息可以被推断出来,你可以用 [] 和 [:] 来创建空数组和空字典——就像你声明变量或者给函数传参 数的时候一样。
shoppingList = []
occupations = [:]

控制流

  • 使用 if 和 switch 来进行条件操作,使用 for-in 、 for 、 while 和 repeat-while 来进行循环。包裹条件和循环 变量括号可以省略,但是语句体的大括号是必须的。
  • 你可以一起使用 if 和 let 来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者 是 nil 以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。(前面几句倒着来看)。如果变量的可选值是 nil ,条件会判断为 false ,大括号中的代码会被跳过。如果不是 nil ,会将值赋给 let 后 面的常量,这样代码块中就可以使用这个值了。

var optionalString: String? = "Hello"
print(optionalString == nil)
var optionalName: String? = "John Appleseed"
//var optionalName: String? = nil
var greeting = "Hello!"
if let name = optionalName {
   greeting = "Hello, \(name)"
}

  • 另一种处理可选值的方法是通过使用 ?? 操作符来提供一个默认值。如果可选值缺失的话,可以使用默认值来代 替。

let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"

  • switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。运行 switch 中匹配到的子句之后,程序会退出 switch 语句,并不会继续向下运行,所以不需要在每个子句结尾 写 break 。

let vegetable = "red pepper"
switch vegetable {
case "celery":
   print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
   print("That would make a good tea sandwich.")
case let y where y.hasSuffix("pepper"):
   print("Is it a spicy \(y)?")
default:
   print("Everything tastes good in soup.")
}

  • 你可以使用 for-in 来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以 任意顺序迭代结束。使用 while 来重复运行一段代码直到不满足条件。循环条件也可以在结尾,保证能至少循环一次。你可以在循环中使用 ..< 来表示范围,也可以使用传统的写法,两者是等价的

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
} }
print(largest)



var n = 2
while n < 100 {
n=n * 2 }
print(n)
var m = 2
repeat {
m=m * 2
} while m < 100
print(m)


var firstForLoop = 0
for i in 0..<4 {
    firstForLoop += i
}
print(firstForLoop)


var secondForLoop = 0
for var i = 0; i < 4; ++i {
    secondForLoop += i
}
print(secondForLoop)



函数和闭包

参考资料

Clone this wiki locally