目錄
1.聲明一個(gè)變量打印
2.數(shù)據(jù)類型的顯式轉(zhuǎn)換
3.常量和變量的輸出
- 直接輸出
- 輸出多個(gè)變量
- 使用占位符將變量或者常量加入到字符串中輸出
- 將上面組合輸出
4.簡(jiǎn)單數(shù)據(jù)類型
- 整形
- 浮點(diǎn)型 Double和Float
- Bool 布爾類型
5.可選類型
- 可選常量
- 可選變量
- 解包
- 隱式解析可選類型
小結(jié)
1.聲明一個(gè)變量打印
Swift中,漢字和圖片表情都可以作為變量名
var start:String;
start = "Hello world"
print(start) // 輸出 Hello world
start = "HarrySun"
print(start) // 輸出HarrySun
//var name // 這樣聲明編譯報(bào)錯(cuò)摊滔,要么說明類型灭抑,要么賦值统翩,讓編譯器自動(dòng)判斷類型爽雄。
var start2 = "hello world" // 自動(dòng)判斷為String,
print(start2) // 輸出 hello world
//start = 10 // 因?yàn)閟tart被自動(dòng)判斷為String跌宛,所有start被賦值10它改,會(huì)編譯出錯(cuò)
let a:Int = 10
let b = 10 // 類型自動(dòng)判斷為Int
let c = 100,d = 20, e = 30
print(e) // 輸出 30
let width = 100.0 // 類型自動(dòng)判斷為Double
print(width) // 輸出 100.0
2.數(shù)據(jù)類型的顯式轉(zhuǎn)換
let numA = 10
let numB = 20.5
//let num1 = numA + numB // 這里會(huì)系統(tǒng)自動(dòng)報(bào)錯(cuò)因?yàn)榛家冢到y(tǒng)不會(huì)自己進(jìn)行隱式類型轉(zhuǎn)換,必須手動(dòng)的進(jìn)行顯式轉(zhuǎn)換厚脉。
let num1 = numA + Int(numB)
let num2 = Double(numA) + numB;
// 此時(shí)得到的num1和num2類型完全不一樣习寸,num1是Int類型,而num2是Double類型的
注意:在swift中傻工,不允許任何形式的數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換霞溪,只能強(qiáng)制轉(zhuǎn)換
3.常量和變量的輸出
1) 直接輸出
// 漢字和圖片表情都可以作為變量名
let name = "HarrySun"
print(name) // 輸出 HarrySun
let 浩子 = "haozi"
print(浩子) // 輸出 haozi
var ?? = "笑"
print(??) // 輸出 笑
let ?? = 100
print(??) // 輸出 100
2) 輸出多個(gè)變量
print(??,??) // 輸出 笑 100
print(name,字符串) // 輸出 HarrySun haozi
3) 使用占位符將變量或者常量加入到字符串中輸出
let city = "Beijing"
print("welcome to \(city)") // 輸出 welcome to Beijing
print("\(??) 一個(gè)") // 輸出 笑 一個(gè)
4) 將上面組合輸出
print("歡迎來到\(city),來,\(??)一個(gè),", 浩子) // 輸出 歡迎來到Beijing,來中捆,笑一個(gè), haozi
4.簡(jiǎn)單數(shù)據(jù)類型
1) 整形
** 分為有符號(hào)和無符號(hào)的整形鸯匹,也分為8位,16位泄伪,32位的殴蓬,64位的,這不同位的和平臺(tái)沒有任何關(guān)系,只有Int和UInt與平臺(tái)有關(guān)系 **
let minA = UInt8.min // 獲取無符號(hào)的8位數(shù)的最小值蟋滴,
let maxA = UInt8.max // 獲取無符號(hào)的8位數(shù)的最小值染厅,
let numB:UInt16 = 100
print(numB)
// var maxC:UInt8 = 289 // 編譯報(bào)錯(cuò),因?yàn)?89超出255最大值的值
var maxC:UInt8 = 240
print(maxC)
2) 浮點(diǎn)型 Double和Float
Double是64位浮點(diǎn)型編譯器根據(jù)自動(dòng)判斷的類型津函,也是系統(tǒng)默認(rèn)的類型糟秘,如何要用Float(32位低精度浮點(diǎn)型),在定義變量時(shí)必須說明Float
let width = 100.5 // width 默認(rèn)Double
let height:Float = 20 // height是Float的低精度浮點(diǎn)型,具體值是20.0
// 常見提示-------以下都是正確的表示球散,為了提高數(shù)值的易讀性--------
let a = 3_500_000 // 此時(shí)的a是3500000下劃線是分隔數(shù)值用的
print(a) //編譯通過
var b = 003.5 // 此時(shí)的b是3.5
var c = 1.25e2 // 表示1.25 * 10^2 等于 1.25*100 就是125
3) Bool 布爾類型
在oc中非0即真,但是在swift只有2個(gè)值屬于Bool類型 就是false和true
let hasResult = true
var hasError = false
5.可選類型
1) 可選常量
**let 常量名 :常量類型? = 常量值 **
let a:Int?
// 聲明可選常量必須指定常量的常量類型蕉堰,常量類型可以是任何類型的數(shù)值凌净,也可以是nil,等以后再賦值
// print(a) 這里編譯報(bào)錯(cuò)屋讶,因?yàn)榭蛇x常量a 沒有賦值 在使用前必須進(jìn)行賦值
2) 可選變量
// var 變量名:變量類型 = 變量值
// var b:Int
// print(b) 這里會(huì)編譯出錯(cuò)冰寻,因?yàn)閎是Int沒有賦值,使用時(shí)要賦值皿渗,如果是Int可選類型斩芭,這里就可以編譯通過,表示nil
var c:Int?
print(c) // 輸出 nil
var d:Int? = 10 //給可選變量賦值以后乐疆, 它的值就是實(shí)際值
print(d) // 輸出 Optional(10)
var e:Int? = 10
e = nil
// 只有可選類型可以賦值划乖,非可選類型不能賦值,例如下班這個(gè)會(huì)報(bào)錯(cuò)
var f:Int = 100
// f = nil 此時(shí)編譯報(bào)錯(cuò) 所有說只有可選型類型可以為nil 其他都不可以
3) 解包
var g:Int? = 10
// print(10 + g) 此時(shí)編譯報(bào)錯(cuò),可選類型不能直接參與計(jì)算
// 此時(shí)就需要解包挤土,“琴庵!”
print(g!+10) // 輸出 20
// 這樣就編譯通過了進(jìn)行解包就可以用參與運(yùn)算,但是這里的前提是可選類型必須有實(shí)際值仰美,如果為nil迷殿,就不能解包參與運(yùn)算,例如下面
// print(10 + c!) 編譯失敗咖杂,因?yàn)閏為nil 庆寺,所有在強(qiáng)制解包時(shí) 一定要保證可選類型非nil的,方法是通過if語(yǔ)句提前進(jìn)行判斷诉字;不然解包不安全懦尝,程序會(huì)crash掉
var name: String? = "loveway"
if name != nil {
print("My name is " + name!) // 輸出 My name is loveway
} else {
print("name is nil")
}
//判空可以解決這個(gè)不安全問題,但是這樣寫比較麻煩奏窑,可以用if let 解包
var name2:String? = "HarrySun"
if let name3 = name2 {
// 這里面只能用if let 解包后的常量名
print("My name is " + name3) // 輸出 My name is HarrySun
}else {
print("name is nil")
}
// 這里叫可選綁定导披,會(huì)進(jìn)行以下兩部操作
// 1>判斷book是否有值,如果沒有值埃唯,直接不執(zhí)行{}
// 2>如果book有值撩匕,系統(tǒng)會(huì)自動(dòng)將name進(jìn)行解包,并且將解包后的結(jié)果墨叛,賦值給book2
var book:String? = nil
if let book2 = book {
// 這里面只能用if let 解包后的常量名
print("Book name is " + book2)
}else{
print("book name is nil") // 輸出 book name is nil
}
4) 隱式解析可選類型
// 對(duì)于可選類型每次解包再參與試用特別麻煩止毕,所有就定了了一個(gè)隱式解析一下可選類型,
// 隱式解析可選類型本質(zhì)是一個(gè)可選類型漠趁,被當(dāng)做一個(gè)自動(dòng)解析的可選類型扁凛,然后就可以被當(dāng)做非可選類型有值得時(shí)候
// 下面是聲明隱式解析的可選常量和變量
var numA:Int! = 10
let numB:Int! = 200
// 下面看一下,可選類型的定義和使用闯传,以及隱式解析可選類型的定義和使用
let schoolName:String? = "北京大學(xué)"
print(schoolName!) // 輸出 北京大學(xué)
let schoolName2:String! = "清華大學(xué)"
print(schoolName2) // 輸出 清華大學(xué)
// 由于隱式解析可選類型本質(zhì)是可選類型谨朝,除了在使用的時(shí)候不用每次解包取值之外,其他特征和
// 隱式解析可選類型不能設(shè)為nil,使用的時(shí)候也要進(jìn)行if判斷
if schoolName2 != nil {
print("學(xué)生名稱") // 輸出 學(xué)生名稱
}
// -------------空合并運(yùn)算符 "字币?则披?"---------
let numC:Int? = nil
print(numC ?? 0) // 輸出 0
// 這里就是說明如果可選類型為nil時(shí),numC就去后面的默認(rèn)值0
// 空合并運(yùn)算符有2個(gè)條件:表達(dá)式a必須是可選型洗出,默認(rèn)值數(shù)據(jù)類型必須和a值的數(shù)據(jù)類型一致