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