Playground
介紹
Playground是從Xcode6開始出現(xiàn)(Swift開始出現(xiàn))
對于學(xué)習(xí)Swift基本用法非常方便
優(yōu)點(diǎn)
1.所見即所得,我們不需要運(yùn)行模擬器就能直接查看結(jié)果
2.語法特性發(fā)生改變時(shí),可以快速查看(swift發(fā)生變化的話 可以直接在Playground查看 而且Playground本身是一個(gè)文件 在后續(xù)學(xué)習(xí)中 如果語法發(fā)生改變 我們可以直接打開Playground文件 查看哪里發(fā)生了改變)
Swift中的常量與變量
使用
定義標(biāo)識符必須指定是常量(let)還是變量(var)
優(yōu)先使用常量(let)
常量的本質(zhì)是他保存的內(nèi)存地址不可以更改 但是可以通過內(nèi)存地址拿到對象內(nèi)部的屬性 修改對象的屬性
// let m : Int = 10可以省略寫成下面這樣
let m = 10
// n是Double類型
let n = 10.00
var view1 = UIView()
view.alpha = 0.5 //這里是通過內(nèi)存地址找到對應(yīng)的對象 修改了對象的alpha屬性 所以這樣是可以的 我們操作的是地址指向的對象 不是地址
swift中的數(shù)據(jù)類型
Swift類型的介紹
Swift中的數(shù)據(jù)類型也有:整型/浮點(diǎn)型/對象類型/結(jié)構(gòu)體類型等等
先了解整型和浮點(diǎn)型
整型
有符號
Int8 : 有符號8位整型
Int16 : 有符號16位整型
Int32 : 有符號32位整型
Int64 : 有符號64位整型
Int : 和平臺相關(guān)(默認(rèn),相當(dāng)于OC的NSInteger)
無符號
UInt8 : 無符號8位整型
UInt16 : 無符號16位整型
UInt32 : 無符號32位整型
UInt64 : 無符號64位整型
UInt : 和平臺相關(guān)(常用,相當(dāng)于OC的NSUInteger)(默認(rèn))
浮點(diǎn)型
Float : 32位浮點(diǎn)型
Double : 64浮點(diǎn)型(默認(rèn))
Swift中的類型推導(dǎo)
Swift是強(qiáng)類型語言
Swift中任何一個(gè)標(biāo)識符都有明確的類型
注意:如果定義一個(gè)標(biāo)識符時(shí)有直接賦值,那么標(biāo)識符后面的類型可以省略,因?yàn)閟wift有類型推導(dǎo),會根據(jù)后面的數(shù)據(jù)復(fù)制來決定前面的數(shù)據(jù)類型 可以通過option+鼠標(biāo)左鍵來查看變量的數(shù)據(jù)類型
// let m : Int = 10可以省略寫成下面這樣
let m = 10
// n是Double類型
let n = 10.00
var view1 = UIView()
Swift中的基本運(yùn)算
swift在進(jìn)行基本運(yùn)算的時(shí)候必須保持?jǐn)?shù)據(jù)類型一致 否則會報(bào)錯(cuò)
swift只有相同類型才能運(yùn)算
swift沒有隱式轉(zhuǎn)換
let result = m + n 這樣式錯(cuò)誤的 因?yàn)閙是Int類型 n是Double類型 不能進(jìn)行計(jì)算
//1.可以把m轉(zhuǎn)換成Double類型進(jìn)行轉(zhuǎn)換 得到的result1也是Double類型
let result1 = Double(m) + n //轉(zhuǎn)換的話是類型(標(biāo)識符)跟OC不一樣 OC的話是(類型)標(biāo)識符
//2.也可以把n轉(zhuǎn)換成Int類型 相應(yīng)的result2也是Int類型
let result2 = m + Int(n)
邏輯分支
分支即if/switch/三目運(yùn)算符等判斷語句 通過分支語句可以控制程序的執(zhí)行流程
if語法
跟OC有點(diǎn)區(qū)別
判斷句可以不加()
判斷句中必須有明確的真假 不再有非0即真 必須有明確的Bool值 Bool值有兩個(gè)值 true/false
let p = 10
/* 錯(cuò)誤寫法
if p {
print(p)
}
這種寫法在OC中是可以的 因?yàn)镺C中有個(gè)非0即真 但在swift中是錯(cuò)誤的
*/
//正確寫法
if p > 0 {//可以不寫()
print(p)
}
if-else
跟OC相似
let score = 80
if score < 0 || score > 100 {
print("不正常的分?jǐn)?shù)")
} else if score < 60 {
print("不及格")
} else if score <= 80 {
print("良好")
} else if score <= 90 {
print("優(yōu)秀")
} else {
print("完美")
}
三目運(yùn)算
三目運(yùn)算的方法跟OC基本一樣
let x = 8
let y = 10
let max = x > y ? x : y
print(max)
guard的使用
guard是swift2.0增加的語法
它與if語句非常相似 目的是為了增強(qiáng)程序的可讀性
注意
* guard必須在函數(shù)中調(diào)用
guard語句必須帶有else語句
當(dāng)條件表達(dá)式為ture的時(shí)候 跳過else語句中的內(nèi)容 執(zhí)行語句組內(nèi)容
當(dāng)條件表達(dá)式為false的時(shí)候 執(zhí)行else語句中的內(nèi)容 else語句中必須有跳轉(zhuǎn)語句 跳轉(zhuǎn)語句一般是return break continue和throw
比如一個(gè)去網(wǎng)吧上網(wǎng)的場景 必須年滿18歲才能上網(wǎng) 如果是if語句的話
let age = 20
//聲明函數(shù)
func online(age : Int) {
// 用if-else語句
if age < 18 {
print("不可以上網(wǎng)")
} else {
print("可以上網(wǎng)")
}
//用guard語句表示
guard age >= 18 else {//else里面是未滿18的
print("未滿18歲 不能上網(wǎng)")
return
}
print("可以上網(wǎng)")
從上面的例子很難看出guard的可讀性的優(yōu)勢 但是換一個(gè)場景 比如: 想要上網(wǎng)的話需要滿足18歲 必須有身份證 必須有錢才能夠上網(wǎng)
// 用if-else語句的話
/*
if age >= 18 {
//
if 帶了身份證 {
if 拿了錢 {
print("開始開機(jī)上網(wǎng)")
} else {//沒有拿錢
print("沒有拿錢");
}
} else {//沒有身份證
print("沒拿身份證")
}
} else {
print("未滿18 不能上網(wǎng)")
}
*/
//使用guard語句的話
/*
guard age >= 18 else {
print("未滿18 不能上網(wǎng)")
return
}
guard 帶了身份證 else {
print("沒拿身份證")
return
}
guard 拿了錢 else {
print("沒有拿錢");
return
}
print("開始開機(jī)上網(wǎng)")
*/
從上面的例子中可以看出 guard的語句更具有可讀性
}
//調(diào)用函數(shù)
online(age: age)
Switch的用法
swift對Switch進(jìn)行了大大的增強(qiáng),使其擁有其他語言中沒有的特性
switch的簡單使用
基本用法跟OC一致 不同之處就是swift的switch后可以不跟() case后可以不寫break(默認(rèn)會有break)
//0: 男 1:女 其它:其它
let sex = 0
switch sex {
case 0:
print("男")
case 1 :
print("女")
default:
print("其它")
}
基本用法補(bǔ)充
一個(gè)case判斷中可以判斷多個(gè)值 多個(gè)值以 , 分開
switch sex {
case 0 , 1:
print("正常人")
default:
print("其它")
}
如果希望一個(gè)case出現(xiàn)case穿透 可以使用fallthrouch 不過很少使用
switch sex {
case 0:
print("男")
fallthrough
case 1:
print("正常人")
default:
print("其它")
}
switch可以判斷浮點(diǎn)型 OC中是不可以的
let pai = 3.14
switch pai {
case 3.14:
print("π")
default:
print("非π")
}
switch可以判斷字符串
let operation = "+"
let e = 10, f = 20
var result = 0
switch operation {
case "+" :
result = e + f
case "-" :
result = e - f
case "*" :
result = e * f
case "/" :
result = e / f
default:
print("非法的操作")
}
print(result)
switch可以判斷區(qū)間
什么是區(qū)間?
通常我們是指的數(shù)字區(qū)間: 0~100, 100~200
swift常見的有兩種區(qū)間
半開半閉區(qū)間: 0..< 10 表示的是0~9 不包括 10
閉區(qū)間: 0...10 表示的是0~10 包括10
//還是以考試分?jǐn)?shù)為例
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("良好")
case 80..<90:
print("優(yōu)秀")
case 90...100:
print("完美")
default:
print("不正常的分?jǐn)?shù)")
}
循環(huán)語句
for循環(huán)
// OC中的寫法
for (int a = 0; i < 10; i++) {
NSLog(@"%d", i);
}
//swift寫法
for i in 0..<10 {
print(i)
}
//當(dāng)我們在循環(huán)語句中不用下標(biāo)值的時(shí)候 可以使用_代替
for _ in 0...9 {
print("hello world")
}
while循環(huán)
while和if一樣 必須有明確的真假 沒有非0即真 ()可以省略
var q = 0
while q < 10 {
q += 1// ++ -- 操作在3.0之后被廢棄了
}
// do while 在swift中 使用repeat關(guān)鍵字 代替do-while中do關(guān)鍵字
var g = 10
repeat {
print(g)
g += 1
} while g < 20