简介
特点
(1)优于OC,快速,安全
(2)取消了预编译指令包括宏定义(OC用的太多了)
(3)取消了OC指针和不安全访问的使用(看不到星星了)
(4)舍弃 Objective-C 早期应用 Smalltalk 的语法,全面改为点语法
(5)3.0中对Foundation框架做了很多改变,去除了NS,将绝大部分class转换成struct结构体(为了考虑性能和安全性,绝大部分使用结构体来代替以前的类,但是在实际使用感觉不到)
(6)可以使用现有的 Cocoa 和 Cocoa Touch 框架
, 以前是OC调UIKit,现在就是Swift调UIKit,这点事没问题的
(7)Swift因为语法的严谨性可以让很多错误提前遇到,这样很少出现bug让程序停在main导致无法找到
(8)@UIApplicationMain是程序的入口
(9)只有.h没有.m
(10)所有的代码都包括在{}里,默认方法func都有缩进!
(11)语法的allocinit替换成()
PlayGround
(1)可以看苹果官方自带的tips和100个tips,都在Placground来使用
基础点
(1)不适用self. 在闭包或者编译器提示的时候再使用
(2)分号是用来分割语句的,如果一行洗很多,就可以加分号,一般时候可以不加
(3)#function打印执行的函数
(4)添加标记用到// MARK: - 选择,如果是接下来要做的可以用// TODO:和// FIXME:这些非常有用
一、常量和变量
定义
// 定义常量并且直接设置数值
let x: Int = 10
// 常量数值一经设置,不能修改,以下代码会报错
// x = 30
let y: Int
// 常量有一次设置的机会,以下代码没有问题,因为 `y` 还没有被设置数值
y = 10
// 一旦设置之后,则不能再次修改,以下代码会报错,因为 `y` 已经被设置了数值
// y = 50
print(x + y)
// 变量设置数值之后,可以继续修改数值
var z: Int
z = 100
z = 200
print(x + y + z)
自动推导
Swift 能够根据右边的代码,推导出变量的准确类型
只有相同类型的值才能够进行运算
// 整数默认的类型是 Int
let intValue = 200
// 小数的默认类型是 Double
let doubleva lue = 10.5
// 如果要对不同类型的数据进行计算,必须要显式的转换
print(intValue + Int(doubleva lue))
print(Double(intValue) + doubleva lue)
注意:Swift对类型要求异常严格,任何不同类型的数据不能直接运算(哪怕是Int和Double),不会做一些自动的转换来转换成Double。Swift不存在基本数据类型,Int和Double都是结构体其实,强转用Double(x)完成,或者在定义的时候直接指定变量的类型let x : Double = 10;(很少使用)
二、控制流
if
- Swift 中没有 C 语言中的非零即真概念
- 在逻辑判断时必须显示地指明具体的判断条件 true / false
- if 语句条件的 () 可以省略
- 但是 {} 不能省略
let num = 100
if num > 10 {
print("大 \(num)")
} else {
print("小 \(num)")
}
三目
- Swift 中的 三目 运算保持了和 OC 一致的风格
- 提示:以下代码,可以按 cmd + shift + y,打开控制台,查看输出结果
num > 10 ? print("大 \(num)") : print("小 \(num)")
或者
num > 10 ? print("大 \(num)") : ()
这样就对后面的不作处理。
() 表示空执行。
switch
- switch 不再局限于整数
- switch 可以针对任意数据类型进行判断
- 每一个 case 后面必须有可以执行的语句
- 不再强制需要 break
- 如果没有任何需要执行的语句,可以使用 break
要保证处理所有可能的情况,不然编译器直接报错,不处理的条件可以放在 default 分支中
- 每一个 case 中定义的变量仅在当前 case 中有效,而 OC 中需要使用 {}
- 多值 case 可以使用 , 分隔
let scoreString = "优"
switch scoreString {
case "优":
let name = "学生"
print(name + "80~100分")
case "良", "中": print("60~80分")
case "差": print("不及格")
default: break
}
switch 的条件判断
- switch 中可以使用 where 子句判断条件
- 如果只做条件判断,case 部分可以使用 _ 省略
- 提示:Swift 中可以使用 _ 忽略任何不关心的内容
let score = 90
switch score {
case _ where score >= 80: print("优")
case _ where score >= 70: print("良")
case _ where score >= 60: print("中")
default: print("差")
}
for
for i in 0...5 {
}
for i in 0..<5 {
}
for i in (0..<10).reversed() {
}
三、可选项(Optional)
简要
(1)定义变量时,如果是可选的,表示可以有值,也可以是nil,用“?”
(2)强行解包 “!”,程序员来注意!,并且要少用,可能会崩
(3)最常见的错误:解包的时候发现nil。fatal error: unexpectedly found nil while unwrapping an Optional value
(4)let可选的话,没有默认值,需要赋值。var可选的话,默认值为nil
(5)可选项在参与计算时候必须解包
概念
- Optional 是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题
- 定义变量时,在类型后面添加一个 ?,表示该变量是可选的
- 定义变量时,如果指定是可选的,表示该变量:
- 可以有一个指定类型的值
- 也可以是 nil
定义
- 格式1(自动推导):var 变量名: Optional = 值
- 格式2(泛型):var 变量名:Optional<类型> = 值
- 格式3(简化格式):var 变量名: 类型? = 值
// 格式1
let x: Optional = 20
// 格式2
let y: Optional<Int> = 30
// 格式3
let z: Int? = 10
print(x