因为是本人学习 Swift 的笔记,是基于所掌握的其他语言来认识 Swift 的,所以并非详尽的 Swift ABC,也就显得凌乱不堪。
不会自动转型,强型转型的方式是 String(变量值), 括号不是括住类型
1 2 |
let number = 123 let message = “total: ” + a //这是错的,必须写成 “total: ” + String(number), 直接常量的话 let message = “total:” + String(123) |
let 为常量, var 为变量, 类型的指定方式与 Scala 一样,如果不让它自动推断或无法推断时,这样指定类型
1 |
var width: Double |
字符串中内联变量方式是用 \(变量名),中间还可以进行计算
1 2 |
let apple=1, oranges=2 let summary = “I have \(apple) apple and \(apple+oranges) fruits" |
Swift 用 “[]” 来创建数组或字典,并且最后一个元素后竟然可以有多余的逗号
1 2 |
let colors = ["red", "blue", ] let map = ["red": 1, "blue": 2,] |
创建空数组或字典
1 2 |
let emptyArray = [String]() let emptyDictionary = [String: Float]() |
类型可以推断的话,能用”[]” 和 “[:]” 来创建空数组和字典,大概是前面已知类型的情况,如
1 2 |
let colors:[String] = [] var map:[String:Int] = [:] |
或者如数组,字典类似
1 2 |
var colours = ["red"] colours = [] |
在Swift 的 let 和 Scala 的 val 都是动真格的,不光变量不能重新赋值,并且声明的集合内容也是不能变的, 下面是不能编译的
Swift 的控制语句有 if, switch, for-in, for, while, repeat-while, 控制中圆括号可以省略,但大括号不能省,即使 if 后面只有一条语句也不行,因为省略圆括号与大括号会存在有冲突的,所以干脆大括号不让省
1 2 3 4 |
let number = 1 if number == 1 print("number is 1") } |
上面 if 中的 == 两边要么都要有空格,要么都没有空格,不能偏向任何一边
如 if number == 1 和 if number== 1 或 if number ==1 是错误的,后两种写法都会误判为闭包
如 if number== 1 被识别为错误
if number ==1 被识别为错误
看 1 后面被自动补充的 _=
Swift 的 Optional 类型要用 ”类型?” 来指定类型,并且声明一个 nil 值也必须用 “类型?" 的形式, 像
1 |
let name:String? = nil |
下面都不行
1 2 |
let name = nil //Type of expression ambiguous without more context, 无法推断类型 let name:String = nil //Nil cannot initialize specified type “String”, 没法初始化 |
看下普通类型与 Optional 类型的不同
Optional 才有 map 方法
let 可用在 if 语句中,不过后面的值必须是一个 Optional 类型
1 2 3 4 5 6 7 |
let n1:Int? = 1 if let n2 = n1 { //n1 必须是一个 Optional 类型,赋什不为 nil 时为真 print("n2 \(n2) not nil") //打印出 "n2 1 not nil" } else { // print(n2), 在 else 中居然无法访问 n2, n2 的作用域只在 if 中 print("n2 is nil") } |
“??” 可为 Optional 提供 nil 时的默认值,如下代码
1 2 3 4 5 6 7 |
let name:String? = nil print(name) //nil print(name ?? "Yanbin") //Yanbin print("Hi \(name ?? "Yanbin")") //Hi Yanbin let age:Int? = 30 print(age ?? 20) //30 |
let 也可用在 switch..case 中,同时完成值的声明与比较,Swift 中的 case 分支默认是 break 的,和 VB 一样的, 相同的 case 可放在一行中
1 2 3 4 5 6 7 8 9 10 |
let name = "Yanbin" switch name { case let x where x.hasPrefix("Yan"): print(x) //Yanbin case "a1", "a2": //多个匹配可以放在同一行,用逗号隔开 print("a1 or a2") default: //default 是语法上必须的 print("no match") } |
0..<4
操作产生了一个不包含上届的 Range, 所以它可以用在循环中
1 2 3 4 |
print((0..<4).dynamicType) //Range<Int> for i in 0..<4 { print(i) //0, 1, 2, 3 } |
本文链接 https://yanbin.blog/swift-learning-basic-syntax/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。