Swift從入門到精通_第1頁
Swift從入門到精通_第2頁
Swift從入門到精通_第3頁
Swift從入門到精通_第4頁
Swift從入門到精通_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Swift是什么Swift是蘋果于WWD2014發(fā)布的編程語言,這里引用TheSwiftProgrammingLanguage的原話:SwiftisanewprogrammingIanguageforiOSandOSXappsthatbuildsonthebestofCandObjective-C, withouttheconstraints ofCcompatibility. Swiftadoptssafeprogrammingpatternsandaddsmodernfeaturestomakeprogrammingeasier,moreflexibleandmorefun.Swift'scleanslate,backedbythematureandmuch -lovedCocoaandCocoaTouchframeworks,isanopportunity toimaginehowsoftwaredevelopmentworks.Swiftisthefirst industrial-quality systemsprogrammingIanguagethatisasexpressiveandenjoyableasascriptingIanguage.簡單的說:Swift用來寫iOS和OSX程序。(估計也不會支持其它屌絲系統(tǒng))Swift吸取了C和Objective-C的優(yōu)點,且更加強大易用。Swift可以使用現(xiàn)有的Cocoa和CocoaTouch框架。Swift兼具編譯語言的高性能 (Performanee)和腳本語言的交互性 (Interactive)。Swift語言概覽基本概念注:這一節(jié)的代碼源自 TheSwiftProgrammingLanguage中的ASwiftTour。Hello,world類似于腳本語言,下面的代碼即是一個完整的 Swift程序。println("Hello,world")變量與常量Swift使用var聲明變量,let聲明常量varmyVariable=42myVariable=50letmyConstant=42類型推導(dǎo)Swift支持類型推導(dǎo)(TypeInference),所以上面的代碼不需指定類型,如果需要指定類型:letexplicitDouble:Double=70Swift不支持隱式類型轉(zhuǎn)換(Implicitlycasting),所以下面的代碼需要顯式類型轉(zhuǎn)換(Explicitlycasting):letlabel="Thewidthis"letwidth=94letwidth=label+String(width)字符串格式化Swift使用'(item)的形式進(jìn)行字符串格式化:letapples=3letoranges=5letappleSummary="Ihave'(apples)apples."letappleSummary="Ihave'(apples+oranges)piecesoffruit."數(shù)組和字典Swift使用[]操作符聲明數(shù)組(array)和字典(dictionary):varshoppingList=["catfish","water","tulips","bluepaint"]shoppingList[1]="bottleofwater"19varoccupations=["Malcolm":"Captain","Kaylee":"Mechanic",]occupations["Jayne"]="PublicRelations"一般使用初始化器(initializer)語法創(chuàng)建空數(shù)組和空字典:letemptyArray=String[]()letemptyDictionary=DictionaryvString,Float>()如果類型信息已知,則可以使用 []聲明空數(shù)組,使用[:]聲明空字典??刂屏鞲庞[Swift的條件語句包含 if和switch,循環(huán)語句包含for-in、for、while和do-while,循環(huán)/判斷條件不需要括號,但循環(huán) /判斷體(body)必需括號:letindividualScores=[75,43,103,87,12]varteamScore=0forscoreinindividualscores{ifscore>50{teamScore+=3} else{teamScore+=1}}可空類型)。對于空值,需要在結(jié)合if和let,可以方便的處理可空變量( nullablevariable)。對于空值,需要在類型聲明后添加顯式標(biāo)明該類型可空。varoptionalString:String="Hello"optionalString==nil12varoptionalName:String="JohnAppleseed"vargretting="Hello!"ifletname=optionalName{gretting="Hello,'(name)"}靈活的switchSwift中的switch支持各種各樣的比較操作:letvegetable="redpepper"switchvegetable{case"celery":letvegetablecomment="Addsomeraisinsandmakeantsonalog."case"cucumber","watercress":letvegetablecomment="Thatwouldmakeagoodteasandwich."caseletxwhere("pepper"):letvegetablecomment="Isitaspicy\(x)"default:letvegetablecomment="Everythingtastesgoodinsoup."}其它循環(huán)

for-in除了遍歷數(shù)組也可以用來遍歷字典:29letinterestingNumbers=[30"Prime":[2,3,5,7,11,13],31"Fibonacci":[1,1,2,3,5,8],32"Square":[1,4,9,16,25],33]34varlargest=035for(kind,numbers)ininterestingNumbers{36fornumberinnumbers{37ifnumber>largest{38largest=number39}40}41}42largestwhile循環(huán)和do-while循環(huán):43varn=244whilen<100{45n=n*246}4748n49varm=250do{51m=m*252}whilem<10053mSwift支持傳統(tǒng)的for循環(huán),此外也可以通過結(jié)合..(生成一個區(qū)間)和for-in實現(xiàn)同樣的邏輯。54varfirstForLoop=055foriin0..3{56firstForLoop+=i57}58firstForLoop59varsecondForLoop=0forvari=0;i<3;++i{secondForLoop+=1}secondForLoop生成前閉后閉的區(qū)間。注意:Swift除了..還有…:生成前閉后開的區(qū)間,而生成前閉后閉的區(qū)間。函數(shù)和閉包函數(shù)Swift使用func關(guān)鍵字聲明函數(shù):funcgreet(name:String,day:String)->String{return"Hello'(name),todayis\(day)."}greet("Bob","Tuesday")通過元組(Tuple)返回多個值:funcgetGasPrices()->(Double,Double,Double){return,,}getGasPrices()支持帶有變長參數(shù)的函數(shù):funcsumOf(numbers:Int...)->Int{varsum=0fornumberinnumbers{sum+=number}returnsum}sumOf()sumOf(42,597,12)函數(shù)也可以嵌套函數(shù):funcreturnFifteen()->Int{vary=10funcadd(){y+=5TOC\o"1-5"\h\z}add()returny}returnFifteen()作為頭等對象,函數(shù)既可以作為返回值,也可以作為參數(shù)傳遞:funcmakeIncrementer()->(Int->Int){funcaddOne(number:Int)->Int{return1+number}returnaddOne}varincrement=makelncrementer()increment(7)funchasAnyMatches(list:Int[],condition:Int->Bool)->Bool{foriteminlist{ifcondition(item){returntrueTOC\o"1-5"\h\z}}returnfalse}funclessThanTen(number:Int)->Bool{returnnumber<10}varnumbers=[20,19,7,12]hasAnyMatches(numbers,lessThanTen)閉包

本質(zhì)來說,函數(shù)是特殊的閉包,Swift中可以利用{}聲明匿名閉包:({(number:Int)->Intinletresult=3*numberreturnresult})當(dāng)閉包的類型已知時,可以使用下面的簡化寫法:({numberin3*number})此外還可以通過參數(shù)的位置來使用參數(shù),當(dāng)函數(shù)最后一個參數(shù)是閉包時,的語法:sort([1,5,3,12,2]){$0>$1}類和對象創(chuàng)建和使用類Swift使用class創(chuàng)建一個類,類可以包含字段和方法:classShape{varnumberOfSides=0funcsimpleDescription()->String{return"Ashapewith\(numberOfSides)sides."}}創(chuàng)建Shape類的實例,并調(diào)用其字段和方法。varshape=Shape()=7varshapeDescription=()可以使用下面也可以隱式引用通過init構(gòu)建對象,既可以使用self顯式引用成員字段(name),(numberOfSides)。可以使用下面也可以隱式引用classNamedShape{varnumberOfSides:Int=0varname:String7init(name:String){=name}11funcsimpleDescription()->String{return"Ashapewith\(numberOfSides)sides."}}使用deinit進(jìn)行清理工作。繼承和多態(tài)Swift支持繼承和多態(tài)(override父類方法)16classSquare:NamedShape{17varsideLength:Double1819init(sideLength:Double,name:String){20=sideLength21(name:name)22numberOfSides=423}2425funcarea()->Double{26returnsideLength*sideLength27}

2829overridefuncsimpleDescription()->String{30return"Asquarewithsidesoflength\(sideLength)."31}32}33lettest=Square(sideLength:,name:"mytestsquare")34()35()注意:如果這里的simpleDescription方法沒有被標(biāo)識為override,則會引發(fā)編譯錯誤。屬性為了簡化代碼,Swift引入了屬性(property),見下面的perimeter字段:36classEquilateralTriangle:NamedShape{37varsideLength:Double=3839init(sideLength:Double,name:String){40=sideLength41(name:name)42numberOfSides=343}4445varperimeter:Double{46get{47return*sideLength48}49set{50sideLength=newValue/51}52}53overridefuncsimpleDescription()->String{return"Anequilateraltriaglewithsidesoflength\(sideLength)."}}vartriangle=EquilateralTriangle(sideLength:,name:"atriangle")5960=61注意:賦值器(setter)中,接收的值被自動命名為newValue。willSet和didSetEquilateralTriangle的構(gòu)造器進(jìn)行了如下操作:為子類型的屬性賦值。調(diào)用父類型的構(gòu)造器。修改父類型的屬性。如果不需要計算屬性的值,但需要在賦值前后進(jìn)行一些操作的話,使用willSet和didSet。65classTriangleAndSquare{66vartriangle:EquilateralTriangle{67willSet{68=69}70}71varsquare:Square{72willSet{

7374}75}76init(size:Double,name:String){77square=Square(sideLength:size,name:name)78triangle=EquilateralTriangle(sideLength:size,name:name)79}80}81vartriangleAndSquare=TriangleAndSquare(size:10,name:"anothertestshape")8283=Square(sideLength:50,name:"largersquare")84從而保證triangle和square擁有相等的sideLength。調(diào)用方法numberOfTimes面向外部,timesnumberOfTimes面向外部,times面85classCounter{86varcount:Int=087funcincrementBy(amount:Int,numberOfTimestimes:Int){88count+=amount*times89}90}91varcounter=Counter()92(2,numberOfTimes:7)以在外部使用(第一個參數(shù)除外),例如:注意Swift支持為方法參數(shù)取別名:在上面的代碼里,向內(nèi)部。的另一種用途使用可空值時,可以出現(xiàn)在方法、屬性或下標(biāo)前面。如果前的值為nil,那么后面的表達(dá)式會被忽略,而原表達(dá)式直接返回nil,例如:letoptionalSquare:Square=Square(sideLength:,name:"optionalsquare")letsideLength=optionalSquare.sideLength當(dāng)optionalSquare為nil時,sideLength屬性調(diào)用會被忽略。枚舉和結(jié)構(gòu)枚舉使用enum創(chuàng)建枚舉 注意Swift的枚舉可以關(guān)聯(lián)方法:enumRank:Int{97caseAce=198caseTwo,Three,Four,Five,Six,Seven,Eight,Nine,Ten99caseJack,Queen,King100funcsimpleDescription()->String{101switchself{102case.Ace:103return"ace"104case.Jack:105return"jack"106case.Queen:107return"queen"

108case.King:109return"king"110default:111returnString())108case.King:109return"king"110default:111returnString())}}}letace=letaceRawValue=()使用toRaw和fromRaw在原始(raw)數(shù)值和枚舉值之間進(jìn)行轉(zhuǎn)換:ifletconvertedRank=(3){letthreeDescription=()}注意枚舉中的成員值(membervalue)是實際的值(actualvalue),和原始值(rawvalue)沒有必然關(guān)聯(lián)。一些情況下枚舉不存在有意義的原始值,這時可以直接忽略原始值:enumSuit{caseSpades,Hearts,Diamonds,ClubsfuncsimpleDescription()->String{switchself{case.Spades:return"spades"case.Hearts:return"hearts"case.Diamonds:return"diamonds"case.Clubs:132}133}131return"clubs"}lethearts=letheartsDescription=()除了可以關(guān)聯(lián)方法,枚舉還支持在其成員上關(guān)聯(lián)值,同一枚舉的不同成員可以有不同的關(guān)聯(lián)的值:enumServerResponse{138caseResult(String,String)139caseError(String)140}141142letsuccess=("6:00am","8:09pm")143letfailure=("Outofcheese.")144145switchsuccess{146caselet.Result(sunrise,sunset):147letserverResponse="Sunriseisat\(sunrise)andsunsetisat\(sunset)."148caselet.Error(error):149letserverResponse="Failure...\(error)"}結(jié)構(gòu)Swift使用struct關(guān)鍵字創(chuàng)建結(jié)構(gòu)。結(jié)構(gòu)支持構(gòu)造器和方法這些類的特性。結(jié)構(gòu)和類的最reference)。structCard{varrank:Rankvarsuit:SuitfuncsimpleDescription()->String{return"The\())of\())"}157}158letthreeOfSpades=Card(rank:.Three,suit:.Spades)159letthreeOfSpadesDescription=()協(xié)議(protocol)和擴展(extension)協(xié)議Swift使用protocol定義協(xié)議:protocolExampleProtocol{varsimpleDescription:String{get}mutatingfuncadjust()4}類型、枚舉和結(jié)構(gòu)都可以實現(xiàn)(adopt)協(xié)議:classSimpleClass:ExampleProtocol{varsimpleDescription:String="Averysimpleclass."varanotherProperty:Int=69105funcadjust(){

vara=SimpleClass()()letaDescription=structSimpleStru

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論