Swift 有多種數(shù)據(jù)類型, 它們各自獨(dú)立
- String, 用于存儲一系列的字符文本數(shù)據(jù), 數(shù)據(jù)內(nèi)容用""包含, 例如"Tim McGraw"
- 重寫一段代碼
var name
name = "Tim McGraw"
- 以上代碼會報(bào)錯(cuò), 提示"Type annotation missing in pattern", 意思是 "編譯器無法識別該變量的數(shù)據(jù)類型, 您沒有提供足夠的信息"
有以下兩種解決方案:
在變量聲明同時(shí)進(jìn)行初始化
```swift
var name = "Tim McGraw"
```
- 在變量聲明時(shí), 明確指定數(shù)據(jù)類型
```swift
var name: String
name = "Tim McGraw"
```
代碼規(guī)范":" 前面一般不留空格, ":" 后面留一個(gè)空格
簡單總結(jié)Swift 類型推斷機(jī)制: 在變量/常量, 聲明時(shí)候, 必須提供類型的足夠信息(初始化, 顯示定義類型)
Int, 用于存儲數(shù)字的類型, 例如3, 30, -16777216等
var name: String
name = "Tim McGraw"
var age: Int
age = 25
上面代碼定義兩個(gè)變量, String 和 Int 類型, Swift中的類型均大寫字母開頭, 變量名稱則小寫字母開頭, 建議在日常開發(fā)中遵守這個(gè)約定
Swift 是類型安全
1.在變量/常量聲明時(shí), 必須提供足夠類型信息(初始化/ 明確聲明類型)
2.不同數(shù)據(jù)類型之間, 不能互相賦值
name = 18 // name 是String類型, 不能賦值整型
age = "Tom" // age 是Int類型, 不能賦值字符串
在繼續(xù)開始之前, 建議在Playgrounds把上面兩行代碼注釋, 避免Playgrounds編譯錯(cuò)誤
Float & Double, 用于存儲帶小數(shù)點(diǎn)的數(shù)值
用兩種類型存儲帶浮點(diǎn)數(shù)的目的
Float 保存7位有效數(shù)字
Double 保存14位有效數(shù)字
根據(jù)有效數(shù)字節(jié)約內(nèi)存空間
Swift中默認(rèn)使用Double, 實(shí)際開發(fā)中用Double即可
// 浮點(diǎn)數(shù)類型聲明和Int, String 相同
var latitude: Double
latitude = 36.166667
var longitude: Float
longitude = -86.783333 // Float顯示7位有效數(shù)字, 所以只顯示-86.78333
- 下面具體用代碼驗(yàn)證Float類型的顯示范圍
var longtitude: Float
longtitude = -86.783333
longtitude = -186.783333
longtitude = -1286.783333
longtitude = -12386.783333
longtitude = -123486.783333
longtitude = -1234586.783333
-
Playgrounds 的返回結(jié)果如下
Snip20160923_6.png
- longtitudeFloat 超過第7位數(shù)字被省略, longtitudeDouble Double類型的精度是Float的雙倍, 所以可以完整顯示
- Bool 布爾數(shù)據(jù)類型, 只有真和假兩種值, 用true false 表示, true 是 真, false 是 假(和OC不同, 沒有非0即真的概念)
var stayOutTooLate: Bool
stayOutTooLate = true
var nothingInBrain: Bool
nothingInBrain = true
var missABeat: Bool
missABeat = false
明智地選擇使用類型聲明
- 聲明變量/常量, 確定類型, 有兩種方式:
根據(jù)初始化字面量, 進(jìn)行類型推斷
明確定義變量/ 常量的類型
- 推薦使用第1種方式, 因?yàn)楦雍啙?/li>
// 推薦使用第一種方法, 自動(dòng)類型推斷
var name = "Tim McGraw"
var name_str: String
name_str = "Tim McGraw"
- 給編譯器提供足夠的類型判斷信息, 也可以這樣定義
var name: String = "Tim McGraw"