Swift 是 iOS 和 OS X 應(yīng)用開(kāi)發(fā)的一門新語(yǔ)言,是在 C 和 Objective-C 的基礎(chǔ)上提出的。
學(xué)習(xí)Swift之前,它的一些必備學(xué)習(xí)資料還是有的
-
Awesome-Swift-Education
集合了大部分的swift的學(xué)習(xí)資料,非常齊全,就是沒(méi)時(shí)間看,極力推薦。 -
Swift Guide
這份指南匯集了Swift語(yǔ)言主流學(xué)習(xí)資源,并以開(kāi)發(fā)者的視角整理編排。
上面兩份中有重復(fù)的,但是確實(shí)可以。
當(dāng)然分細(xì)一點(diǎn)
- 蘋果官方的開(kāi)發(fā)者社區(qū),這里有Swift的開(kāi)發(fā)教程和指南,是個(gè)學(xué)習(xí)的地方。
- 蘋果官方github地址,源碼還是可以要看的。
- Swift Learn 實(shí)時(shí)更新,這是中文版Apple官方Swift教程《The Swift Programming Language》做到實(shí)時(shí)更新。
- Swift周報(bào),還是可以持續(xù)關(guān)注的。
基礎(chǔ)部分
變量和常量
//簡(jiǎn)單舉例
var oneString = "oneTest" // 變量
let nowTimes = 0 // 常量
print(oneString,nowTimes)
但是像這樣定義之后,一般會(huì)有警告 oneString 提示沒(méi)有使用建議轉(zhuǎn)換成 let 類型,說(shuō)明var 是需要變化的。
類型標(biāo)注
var oneString :String // 變量
// === NSString * oneString
oneString = "twoTest"
類型推斷
Swift 是一個(gè)類型安全(type safe)的語(yǔ)言。類型安全的語(yǔ)言可以讓你清楚地知道代碼要處理的值的類型。如果你的代碼需要一個(gè)String,你絕對(duì)不可能不小心傳進(jìn)去一個(gè)Int。
由于 Swift 是類型安全的,所以它會(huì)在編譯你的代碼時(shí)進(jìn)行類型檢查(type checks),并把不匹配的類型標(biāo)記為錯(cuò)誤。這可以讓你在開(kāi)發(fā)的時(shí)候盡早發(fā)現(xiàn)并修復(fù)錯(cuò)誤.
let pi = 3.14159
// pi 會(huì)被推測(cè)為 Double 類型
let meaningOfBasketball = 23
// meaningOfLife 會(huì)被推測(cè)為 Int 類型
nil 和 可選
nil 可以給可選變量賦值為nil來(lái)表示它沒(méi)有值:
var serverResponseCode: Int? = 404
// serverResponseCode 包含一個(gè)可選的 Int 值 404
serverResponseCode = nil
// serverResponseCode 現(xiàn)在不包含值
var surveyAnswer: String?
// surveyAnswer 被自動(dòng)設(shè)置為 nil
注意
使用
!來(lái)獲取一個(gè)不存在的可選值會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。
使用!來(lái)強(qiáng)制解析值之前,一定要確定可選包含一個(gè)非nil的值。
可選類型暗示了常量或者變量可以“沒(méi)有值”??蛇x可以通過(guò)if語(yǔ)句來(lái)判斷是否有值,如果有值的話可以通過(guò)可選綁定來(lái)解析值。
有時(shí)候在程序架構(gòu)中,第一次被賦值之后,可以確定一個(gè)可選類型總會(huì)有值。在這種情況下,每次都要判斷和解析可選值是非常低效的,因?yàn)榭梢源_定它總會(huì)有值。這種類型的可選狀態(tài)被定義為隱式解析可選類型(implicitly unwrapped optionals)。把想要用作可選的類型的后面的問(wèn)號(hào)(String?)改成感嘆號(hào)(String!)來(lái)聲明一個(gè)隱式解析可選類型。
總結(jié)
發(fā)現(xiàn)基礎(chǔ)這塊是最難總結(jié)和概括的,需要后續(xù)項(xiàng)目經(jīng)驗(yàn)的加深才能有更系統(tǒng)的理解,暫時(shí)只能大致記錄,后面陸續(xù)增加中~~~
問(wèn)題一、打印,只用Print,如何區(qū)分不同類型的?
print(_:separator:terminator:)
NSLog(@""); println(),都不用了,只用print
print("one====\(oneString)")
//日志打印 one====twoTest
但是打印浮點(diǎn)數(shù)的時(shí)候,我們需要
let a = 0.12122
let format = String(format:"%.2f",a)
print("double==:\(format)" )
// double==:0.12
此時(shí)我們最好為Double 寫一個(gè)擴(kuò)展
extension Double {
func format(f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let format0 = ".2"
print("double:\(a.format(format0))") // 這樣就可以達(dá)到同樣的效果啦 // double:0.12
備注:Double和Float的區(qū)別
- Double表示64位浮點(diǎn)數(shù)。當(dāng)你需要存儲(chǔ)很大或者很高精度的浮點(diǎn)數(shù)時(shí)請(qǐng)使用此類型。
- Float表示32位浮點(diǎn)數(shù)。精度要求不高的話可以使用此類型。
Double精確度很高,至少有15位數(shù)字,而Float最少只有6位數(shù)字。選擇哪個(gè)類型取決于你的代碼需要處理的值的范圍。