>
學(xué)校機構(gòu) >
北京藍(lán)鷗ios電腦培訓(xùn)學(xué)校 >
學(xué)習(xí)資訊>
藍(lán)鷗Swift干貨分享
藍(lán)鷗Swift干貨分享
74 2017-04-14
Swift以其新面目閃亮登場,北京iOS培訓(xùn),藍(lán)鷗3G學(xué)院和您一起解析蘋果新語言:
Swift是一門集C語言、Objective-C語言優(yōu)勢于一身的全新編程語言,是由蘋果開發(fā)的專門針對iOS以及OSX平臺的程序設(shè)計語言,并且完全兼容C語言。Swift采用更安全的編程模式,并且添加了一些流行的特性,這讓編程變得更加簡單,更加靈活,更有樂趣。Swift以其全新的面貌展示給眾人,借助于成熟的、非常受歡迎的Cocoa以及CocoaTouch框架為重新定義軟件開發(fā)方式創(chuàng)造了有利條件。
Swift已經(jīng)醞釀多年,蘋果通過改進(jìn)現(xiàn)有的編譯器、調(diào)試器、以及基礎(chǔ)框架為Swift建立了堅實的基矗我們通過自動引用計數(shù)技術(shù)(ARC)進(jìn)一步簡化了內(nèi)存管理的方式。建立在Foundation框架以及Cocoa框架等堅實的基礎(chǔ)上的框架,Swift已經(jīng)具備現(xiàn)代化和標(biāo)準(zhǔn)化的特征。Objective-C已經(jīng)演化到支持塊語句(block)、集合字面量、模塊以及通過使用框架來與現(xiàn)代化語言技術(shù)實現(xiàn)無縫對接。感謝這些基礎(chǔ)工作,我們現(xiàn)在可以正式介紹蘋果未來軟件開發(fā)的全新語言-Swift。
Swift對于使用Objective-C作為開發(fā)語言的開發(fā)人員來說可謂似曾相識,十分親切。因為它采用Objective-C見名知意的參數(shù)命名規(guī)則以及強大的Objective-C動態(tài)對象模型。它可以與現(xiàn)有的Cocoa框架無縫對接,并且可以與Objective-C實現(xiàn)代碼混編。建立在這些共同點上,Swift還引入了許多新特性、代碼混編并且是完全面向?qū)ο蟮恼Z言。
Swift對于開發(fā)者來說是友好的。它是第一款像腳本語言一樣靈活、有趣的企業(yè)級系統(tǒng)編程語言。它支持playgrounds模式,一個無需通過編譯和運行程序就能允許開發(fā)者一邊寫Swift代碼一邊立即查看代碼的執(zhí)行結(jié)果的創(chuàng)造性嘗試。
Swift結(jié)合了現(xiàn)代開發(fā)語言的各種優(yōu)勢,這源自于蘋果的優(yōu)良的開發(fā)文化。其編譯器為性能而生,而其語言為開發(fā)而生,缺一不可。這一切使得Swift成為開發(fā)者乃至蘋果最有價值的投資。
編寫iOS和OSX應(yīng)用,Swift是一個非常棒的方式,未來會持續(xù)引入新特性和新功能。對于Swift,我們擁有雄心壯志,真是迫不及待的想要看到您如何用它來創(chuàng)造奇跡。
Swift概覽
依照傳統(tǒng),第一次使用新的語言做開發(fā),應(yīng)當(dāng)在屏幕上打印出來“Hello,world”。用Swift,只需要簡單的寫下如下語句:
println("Hello,world")
如果你已經(jīng)寫過C語言或者Objective-C代碼,Swift這種語法規(guī)則你一定會覺得很面熟,并且這已經(jīng)是一個完整的程序了。你無需引入單獨的類庫來完成輸入/輸入或者字符串操作功能。代碼書寫在一個程序的全局入口,所以你不再需要main函數(shù)。最最重要的是你也不必在每行語句結(jié)束時寫上惱人的分號。
本章節(jié)將提供足夠的信息幫助你如何使用Swift語言完成多種不同的編程工作。還不理解?不必?fù)?dān)心,概覽中提到的知識點將在本書隨后的內(nèi)容中會詳細(xì)講解。
注:
為了得到更好的體驗,請在XCode中創(chuàng)建playground項目,Playgrounds可以編寫Swift代碼,同時立即查看代碼的執(zhí)行結(jié)果
簡單值
使用let關(guān)鍵字聲明常量,使用var關(guān)鍵字聲明變量。雖然編譯時不必知道常量的值,但是至少得為聲明的常量賦值一次。這意味著聲明一個常量,可以多次使用該常量對應(yīng)的值。
varmyVariable=42
myVariable=50
letmyConstant=42
常量或者變量應(yīng)當(dāng)與你所賦的值類型相同。通常,不用書寫確切的類型。只需要為一個常量或者變量賦值,讓編譯器去推斷它們的類型吧。在上述的例子中,編譯器會推斷出myVariable變量是一個整型integer因為其初值就是整型的。
如果初值沒有足夠的信息用于推斷其類型(或者根本沒有初值)可以通過在常量或者變量名后添加冒號和類型名來指定其類型。
letimplicitInteger=70
letimplicitDouble=70.0
letexplicitDouble:Double=70
實驗:
聲明一個常量賦初值為4,并且指明其類型為Float型
在Swift中不能隱式轉(zhuǎn)換一個值的類型,如果需要將某個值轉(zhuǎn)換成不同類型,需要創(chuàng)建代轉(zhuǎn)類型的實例。
letlabel="Thewidthis"
letwidth=94
letwidthLabel=label+String(width)
實驗:
嘗試移除最后一行字符串轉(zhuǎn)換函數(shù),看到了什么錯誤?
其實有更簡單的方式將一些基本數(shù)據(jù)包含到字符串中,那就是將數(shù)據(jù)寫在小括號中,然后在小括號前加一個反斜杠就可以了。例如:
letapples=3
letoranges=5
letappleSummary="Ihave\(apples)apples."
letfruitSummary="Ihave\(apples+oranges)piecesoffruit."
實驗:
使用\()將一個浮點型數(shù)值加入到一個包含某人姓名的字符串中
用中括號([])來聲明數(shù)組和字典,然后通過在[]中寫上數(shù)組的下標(biāo)或者字典中的鍵來訪問數(shù)據(jù)元素。
varshoppingList=["catfish","water","tulips","bluepaint"]
shoppingList[1]="bottleofwater"
varoccupations=[
"Malcolm":"Captain",
"Kaylee":"Mechanic",
]
occupations["Jayne"]="PublicRelations"
如果要創(chuàng)建空的數(shù)組或者字典,可以使用初始化語法。
letemptyArray=String[]()
letemptyDictionary=Dictionary
如果類型可以被編譯器推斷出來,那么你可以直接用[]創(chuàng)建空數(shù)組,[:]來創(chuàng)建字典—例如,當(dāng)你為一個變量賦一個新值,或者為一個函數(shù)傳參數(shù)是,你可以這樣做:
shoppingList=[]//Wentshoppingandboughteverything.
控制流程
使用if和switch做條件判斷,使用for-in,for,while和do-while來執(zhí)行循環(huán)。值得注意的是,判斷條件或者循環(huán)變量旁的小括號不是必寫的。但是大括號依然要寫。
letindividualScores=[75,43,103,87,12]
varteamScore=0
forscoreinindividualScores{
ifscore>50{
teamScore+=3
}else{
teamScore+=1
}
}
teamScore
在if語句中,判斷條件必須是布爾表達(dá)式(Boolean)—這樣的話,ifscore{…}這句就是有錯誤的,因為score并不是隱式的跟0做比較。
在當(dāng)某些值可能為空的時候,你可以同時使用if和let,這樣這些值就表示為可選的。一個可選的值既可以包含某個確定的值也可以為nil,nil表示一個空值。當(dāng)然在類型后加一個問號(?)就可以將該值標(biāo)記為可選的。
varoptionalString:String?="Hello"
optionalString==nil
varoptionalName:String?="JohnAppleseed"
vargreeting="Hello!"
ifletname=optionalName{
greeting="Hello,\(name)"
}
實驗:
將optionalName賦值為nil,greeting的結(jié)果會是什么呢?當(dāng)optionalName為nil是添加一個else語句來設(shè)置一個不同的greeting
如果可選值為nil,那么if語句的判斷條件就是false,大括號中的代碼也會被跳過。否則,可選值就會執(zhí)行相關(guān)的代碼塊并把結(jié)果賦值給let后面對應(yīng)的常量,這樣大括號所表示的代碼塊的值就會可用。
不同于C語言或者Objective-C,switch語句在Swift語言中支持任意數(shù)據(jù)類型和各種各樣的比較操作—并局限于整型和等式比較。
letvegetable="redpepper"
switchvegetable{
case"celery":
letvegetableComment="Addsomeraisinsandmakeantsonalog."
case"cucumber","watercress":
letvegetableComment="Thatwouldmakeagoodteasandwich."
caseletxwherex.hasSuffix("pepper"):
letvegetableComment="Isitaspicy\(x)?"
default:
letvegetableComment="Everythingtastesgoodinsoup."
}
實驗:
嘗試移除defaultcase,你看到了什么錯誤?
當(dāng)符合條件的case被執(zhí)行后,程序?qū)鰏witch語句。程序并不會順序執(zhí)行接下來的case,所以在switch語句中就沒有必要顯式的通過在每個case對應(yīng)的代碼片段結(jié)尾使用關(guān)鍵字break來跳出該語句。
同時,你可以通過兩個變量來表示字典的每一個鍵值對再配合使用for-in來快速遍歷字典。
letinterestingNumbers=[
"Prime":[2,3,5,7,11,13],
"Fibonacci":[1,1,2,3,5,8],
"Square":[1,4,9,16,25],
]
varlargest=0
for(kind,numbers)ininterestingNumbers{
fornumberinnumbers{
ifnumber>largest{
largest=number
}
largest
實驗:
通過添加一個新的變量來記錄遍歷得到的數(shù)中的最大數(shù)
while語句依然繼承自C語言,除非條件發(fā)生改變,否則會循環(huán)執(zhí)行某段代碼。同時循環(huán)的條件也可以寫在最后面,這樣可以確保循環(huán)至少會被執(zhí)行一次—do-while。
varn=2
whilen<100{
n=n*2
}
n
varm=2
do{
m=m*2
whilem<100
m
在for循環(huán)中,你可以使用..來描述循環(huán)變量的取值范圍,或者依然使用C語言中聲明變量,條件和自增運算的方式,這兩者是等價的。
varfirstForLoop=0
foriin0..3{
firstForLoop+=i
}
firstForLoop
varsecondForLoop=0
forvari=0;i<3;++i{
secondForLoop+=1
}
secondForLoop
如果是使用..的話,取值范圍不包括上限(類似于i<5),若要包括則需要使用…(i<=5).
全部內(nèi)容請關(guān)注藍(lán)鷗iOS培訓(xùn):lanou3g/lo_news/
掃一掃
獲取更多福利
獵學(xué)網(wǎng)企業(yè)微信
獵學(xué)網(wǎng)訂閱號
獵學(xué)網(wǎng)服務(wù)號