Swift 学习笔记(基本语法)

因为是本人学习 Swift 的笔记,是基于所掌握的其他语言来认识 Swift 的,所以并非详尽的 Swift ABC,也就显得凌乱不堪。

不会自动转型,强型转型的方式是 String(变量值), 括号不是括住类型
1let number = 123
2let message = "total: " + a  //这是错的,必须写成 “total: " + String(number), 直接常量的话 let message = “total:" + String(123)

let 为常量, var 为变量, 类型的指定方式与  Scala 一样,如果不让它自动推断或无法推断时,这样指定类型
1var width: Double
字符串中内联变量方式是用 \(变量名),中间还可以进行计算
1let apple=1, oranges=2
2let summary = "I have \(apple) apple and \(apple+oranges) fruits"
Swift 用 “[]" 来创建数组或字典,并且最后一个元素后竟然可以有多余的逗号
1let colors = ["red", "blue", ]
2let map = ["red": 1, "blue": 2,]
创建空数组或字典
1let emptyArray = [String]()
2let emptyDictionary = [String: Float]()
类型可以推断的话,能用"[]" 和 “[:]" 来创建空数组和字典,大概是前面已知类型的情况,如
1let colors:[String] = []
2var map:[String:Int] = [:] 
或者如数组,字典类似
1var colours = ["red"]
2colours = [] 
在Swift 的 let 和 Scala 的 val 都是动真格的,不光变量不能重新赋值,并且声明的集合内容也是不能变的, 下面是不能编译的
 
 
Swift 的控制语句有  if, switch, for-in, for, while, repeat-while, 控制中圆括号可以省略,但大括号不能省,即使 if 后面只有一条语句也不行,因为省略圆括号与大括号会存在有冲突的,所以干脆大括号不让省

1let number = 1
2if number == 1
3  print("number is 1")
4} 
上面 if 中的  == 两边要么都要有空格,要么都没有空格,不能偏向任何一边
如 if number == 1  和 if number== 1 或 if number ==1 是错误的,后两种写法都会误判为闭包
如 if number== 1 被识别为错误


if number ==1 被识别为错误
 
 
看 1 后面被自动补充的 _=
Swift 的 Optional 类型要用 "类型?" 来指定类型,并且声明一个 nil 值也必须用 “类型?" 的形式, 像
1let name:String? = nil
下面都不行
1let name = nil //Type of expression ambiguous without more context, 无法推断类型
2let name:String = nil //Nil cannot initialize specified type “String", 没法初始化
看下普通类型与 Optional 类型的不同
 
 
Optional 才有 map 方法
let 可用在 if 语句中,不过后面的值必须是一个 Optional 类型
1let n1:Int? = 1
2if let n2 = n1 { //n1 必须是一个 Optional 类型,赋什不为 nil 时为真
3  print("n2 \(n2) not nil")  //打印出 "n2 1 not nil"
4} else {
5//    print(n2), 在 else 中居然无法访问 n2, n2 的作用域只在 if 中
6  print("n2 is nil")
7}
"??" 可为 Optional 提供 nil 时的默认值,如下代码
1let name:String? = nil
2print(name) //nil
3print(name ?? "Yanbin") //Yanbin
4print("Hi \(name ?? "Yanbin")") //Hi Yanbin
5
6let age:Int? = 30
7print(age ?? 20) //30
let 也可用在 switch..case 中,同时完成值的声明与比较,Swift 中的  case 分支默认是  break 的,和 VB 一样的, 相同的 case 可放在一行中
 1let name = "Yanbin"
 2 
 3switch name {
 4case let x where x.hasPrefix("Yan"):
 5  print(x)             //Yanbin
 6case "a1", "a2":       //多个匹配可以放在同一行,用逗号隔开
 7  print("a1 or a2")
 8default:               //default 是语法上必须的
 9  print("no match")
10} 
0..<4 操作产生了一个不包含上届的 Range, 所以它可以用在循环中
1 print((0..<4).dynamicType) //Range<Int>
2 for i in 0..<4 {
3     print(i)  //0, 1, 2, 3
4 }
永久链接 https://yanbin.blog/swift-learning-basic-syntax/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。