Swift刑侏
<貧匯准
和匯准>
刑侏旗鷹辛參鳩隠低亟竃痩試議?辛嶷喘議痕方才協吶竃販採低侭鳩協挫議俶箔議窃侏。低議辛參亟竃閲窒嶷鹸議旗鷹?旺拝喘匯嶽賠漣議?渇嵆議圭塀燕器竃栖。
刑侏頁Swift俶勣膿寄蒙尢嶄議凪嶄匯倖?俯謹Swift炎彈垂頁宥狛刑侏旗鷹更秀竃栖議。並糞貧?低厮将聞喘刑侏香刊彭屁倖Language Guide?軸宴低短嗤糞孖万。箭泌?Swift議Array才Dictionary窃侏脅頁刑侏鹿。低辛參幹秀匯倖Int方怏?匆辛幹秀匯倖String方怏?賜宀封崛噐辛參頁販採凪麿Swift議窃侏方象方怏。揖劔議?低匆辛參幹秀贋刈販採峺協窃侏議忖灸(dictionary)?遇拝宸乂窃侏辛參頁短嗤尫崙議。
宸倖痕方聞喘in-out歌方住算a才b議峙?宸曾倖歌方瓜宙峰葎In-Out窃侏歌方。
swapTwoInts痕方辛參住算b議圻兵峙欺a?匆辛參住算a議圻兵峙欺b?低辛參距喘宸倖痕方住算曾倖Int延楚峙?
swapTwoInts痕方頁掲械嗤喘議?徽頁万峪嬬住算Int峙?泌惚低?勣住算曾倖String賜宀Double?祥音誼音亟厚謹議痕方?泌swapTwoStrings才swapTwoDoublesfunctions?泌揖泌和侭幣?
低辛嬬廣吭欺 swapTwoInts、 swapTwoStrings才swapTwoDoubles痕方麼籾脅頁屢揖議?率匯音揖岻侃祥壓噐勧秘議延楚音揖?蛍艶頁Int、String才Double。
徽糞縞哘喘嶄宥械俶勣匯倖喘侃厚膿寄旺拝勝辛嬬議深打欺厚謹議痩試來汽倖痕方?辛參喘栖住算曾倖販採窃侏峙?載侑塰議頁?刑侏旗鷹逸低盾畳阻宸嶽諒籾。?匯倖宸嶽刑侏痕方朔中厮将協吶挫阻。?
swapTwoValues痕方麼悶才swapTwoInts痕方頁匯劔?遇拝?峪壓及匯佩不裏嗤椎担匯泣泣音揖噐swapTwoInts?泌和侭幣?
宸倖痕方議刑侏井云聞喘阻准泣窃侏凋兆?宥械緩秤趨和喘忖銚T栖燕幣?栖旗紋糞縞窃侏兆?泌Int、String賜Double?。准泣窃侏兆旺音頁燕幣T駅倬頁販採窃侏?徽頁凪号協a才b駅倬頁揖匯窃侏議T?遇音砿T燕幣販採窃侏。峪嗤swapTwoValues痕方壓耽肝距喘扮侭勧秘議糞縞窃侏畳協阻T侭旗燕議窃侏。
総翌匯倖音揖岻侃壓噐宸倖刑侏痕方兆朔中効彭議准泣窃侏兆(T)頁喘錫凄催凄軟栖議()。宸倖錫凄催御盆Swift椎倖T頁swapTwoValues痕方侭協吶議匯倖准泣窃侏。咀葎T頁匯倖准泣?Swift音氏肇臥孀耽匯倖凋兆葎T議糞縞窃侏。
swapTwoValues痕方茅阻峪勣勧秘議曾倖販採窃侏峙頁揖匯窃侏翌?匆辛參恬葎swapTwoInts痕方瓜距喘。耽肝swapTwoValues瓜距喘?T侭旗燕議窃侏峙脅氏勧公痕方。
壓和中議曾倖箭徨嶄,T蛍艶旗燕Tnt才String?
匯稀匯倖窃侏歌方瓜峺協?椎担凪辛參瓜聞喘栖協吶匯倖痕方議歌方窃侏?泌swapTwoValues痕方嶄議歌方a才b??賜恬葎匯倖痕方卦指窃侏?賜喘恬痕方麼悶嶄議廣瞥窃侏。壓宸嶽秤趨和?瓜窃侏歌方侭旗燕議准泣窃侏音砿痕方販採扮昨瓜距喘?脅氏瓜糞縞窃侏侭紋算?壓貧中swapTwoValues箭徨嶄?輝痕方及匯肝瓜距喘扮?T瓜Int紋算?及屈肝距喘扮?瓜String紋算?。
低辛屶隔謹倖窃侏歌方?凋兆壓錫凄催嶄?喘矯催蛍蝕。
泌惚低聞喘謹倖歌方協吶厚鹸墫議刑侏痕方賜刑侏窃侏?椎担聞喘厚謹議宙峰窃侏歌方頁掲械嗤喘議。箭泌?Swift忖灸(Dictionary)窃侏嗤曾倖窃侏歌方?匯倖頁key?総翌匯倖頁峙。泌惚低徭失亟忖灸?低賜俯氏協吶宸曾倖窃侏歌方葎KeyType才ValueType?喘栖芝廖万断壓低議刑侏旗鷹嶄議恬喘。
宸何蛍?低婢幣泌採亟匯倖刑侏鹿窃侏-Stack(媚)。匯倖媚頁匯狼双峙囃議鹿栽?才array(方怏)屢貌?徽凪頁匯倖曳Swift議Array窃侏厚謹尫崙議鹿栽。匯倖方怏辛參塋俯凪戦中販採了崔議峨秘/評茅荷恬?遇媚?峪塋俯?峪塋俯壓鹿栽議挑極耶紗仟議??泌揖push匯倖仟峙序媚?。揖劔議匯倖媚匆峪嬬貫挑極卞茅??泌揖pop匯倖峙竃媚?。
和夕婢幣阻匯倖媚議儿媚(push)/竃媚(pop)議佩葎?
宸倖潤更悶壓媚嶄聞喘匯倖Array來嵎議items贋刈峙。Stack戻工曾倖圭隈?push才pop?貫媚嶄儿序匯倖峙才卞茅匯倖峙。宸乂圭隈炎芝葎辛延議?咀葎麿断俶勣俐個?賜廬算?潤更悶議items方怏。
貧中侭婢孖議IntStack窃侏峪嬬喘噐Int峙?音狛?凪斤噐協吶匯倖刑侏Stack窃?辛參侃尖販採窃侏峙議媚?頁掲械嗤喘議。
宸戦頁匯倖屢揖旗鷹議刑侏井云?
廣吭欺Stack議刑侏井云児云貧才掲刑侏井云屢揖?徽頁刑侏井云議准泣窃侏歌方葎T旗紋阻糞縞Int窃侏。宸嶽窃侏歌方淫根壓匯斤錫凄催戦(<T>)?諸昧壓潤更悶兆忖朔中。
T協吶阻匯倖兆葎“蝶嶽窃侏T”議准泣戻工公朔栖喘。宸嶽繍栖窃侏辛參壓潤更悶議協吶戦販採仇圭燕幣葎“T”。壓宸嶽秤趨和?T壓泌和眉倖仇圭瓜喘恬准泣?
輝幹秀匯倖仟汽箭旺兜兵晒扮? 宥狛喘匯斤諸昧壓窃侏兆朔議錫凄催戦亟竃糞縞峺協媚喘欺窃侏?幹秀匯倖Stack糞箭?揖幹秀Array才Dictionary匯劔?
和夕繍婢幣stackOfStrings泌採push宸膨倖峙序媚議狛殻?
貫媚嶄pop旺卞茅峙"cuatro"?
和夕婢幣阻泌採貫媚嶄pop匯倖峙議狛殻?
喇噐Stack頁刑侏窃侏?侭參壓Swift嶄凪辛參喘栖幹秀販採嗤丼窃侏議媚?宸嶽圭塀泌揖Array才Dictionary。
箭泌?Swift議Dictionary窃侏斤恬喘噐凪keys議窃侏恂阻乂尫崙。壓Dictionaries議宙峰嶄?忖灸議keys窃侏駅倬頁hashable?匆祥頁傍?駅倬嗤匯嶽圭隈辛參聞凪頁率匯議燕幣。Dictionary岻侭參俶勣凪keys頁hashable頁葎阻參宴噐凪殊臥凪頁倦淫根蝶倖蒙協key議峙。泌涙緩俶箔?Dictionary軸音氏御盆頁倦峨秘賜宀紋算阻蝶倖蒙協key議峙?匆音嬬臥孀欺厮将贋刈壓忖灸戦中議公協key峙。
宸倖俶箔膿崙紗貧匯倖窃侏埃崩恬喘噐Dictionary議key貧?輝隼凪key窃侏駅倬恆儉Hashable亅咏?Swift炎彈垂嶄協吶議匯倖蒙協亅咏?。侭嗤議Swift児云窃侏?泌String?Int? Double才 Bool?潮範脅頁hashable。
輝低幹秀徭協吶刑侏窃侏扮?低辛參協吶低徭失議窃侏埃崩?輝隼?宸乂埃崩勣屶隔刑侏園殻議膿薦蒙尢嶄議謹方。渇嵆古廷泌Hashtable醤嗤議窃侏蒙尢頁功象麿断古廷蒙尢栖順協議?遇音頁麿断議岷俊窃侏蒙尢。
貧中宸倖邪協痕方嗤曾倖窃侏歌方。及匯倖窃侏歌方T?嗤匯倖俶勣T駅倬頁SomeClass徨窃議窃侏埃崩?及屈倖窃侏歌方U?嗤匯倖俶勣U駅倬恆儉SomeProtocol亅咏議窃侏埃崩。
findStringIndex痕方辛參恬喘噐臥孀匯忖憲堪方怏嶄議蝶倖忖憲堪:
泌惚峪頁寞斤忖憲堪遇冱臥孀壓方怏嶄議蝶倖峙議沫哈?喘侃音頁載寄?音狛?低辛參亟竃屢揖孔嬬議刑侏痕方findIndex?喘蝶倖窃侏T峙紋算渠戻欺議忖憲堪。
宸戦婢幣泌採亟匯倖低賜俯豚李議findStringIndex議刑侏井云findIndex。萩廣吭宸倖痕方挽隼卦指Int?頁音頁嗤泣痴雌椿?遇音頁刑侏窃侏?椎頁咀葎痕方卦指議頁匯倖辛僉議沫哈方?遇音頁貫方怏嶄誼欺議匯倖辛僉峙。俶勣戻佰議頁?宸倖痕方音氏園咎?圻咀壓箭徨朔中氏傍苧?
貧中侭亟議痕方音氏園咎。宸倖諒籾議了崔壓吉塀議殊臥貧?“if value == valueToFind”。音頁侭嗤議Swift嶄議窃侏脅辛參喘吉塀憲(==)序佩曳熟。箭泌?泌惚低幹秀匯倖低徭失議窃賜潤更悶栖燕幣匯倖鹸墫議方象庁侏?椎担Swift短隈佳欺斤噐宸倖窃賜潤更悶遇冱“吉噐”議吭房。屎咀泌緩?宸何蛍旗鷹音嬬辛嬬隠屬垢恬噐耽倖辛嬬議窃侏T?輝低編夕園咎宸何蛍旗鷹扮浩柴氏竃孖屢哘議危列。
音狛?侭嗤議宸乂旺音氏斑厘断涙貫和返。Swift炎彈垂嶄協吶阻匯倖Equatable亅咏?乎亅咏勣箔販採恆儉議窃侏糞孖吉塀憲(==)才音吉憲(!=)斤販採曾倖乎窃侏序佩曳熟。侭嗤議Swift炎彈窃侏徭強屶隔Equatable亅咏。
販採Equatable窃侏脅辛參芦畠議聞喘壓findIndex痕方嶄?咀葎凪隠屬屶隔吉塀荷恬。葎阻傍苧宸倖並糞?輝低協吶匯倖痕方扮?低辛參亟匯倖Equatable窃侏埃崩恬葎窃侏歌方協吶議匯何蛍?
findIndex嶄宸倖汽倖窃侏歌方亟恂?T: Equatable?匆祥吭龍彭“販採T窃侏脅恆儉Equatable亅咏”。
findIndex痕方孖壓夸辛參撹孔議園咎狛?旺拝恬喘噐販採恆儉Equatable議窃侏?泌Double賜String?
Container亅咏協吶阻眉倖販採否匂駅倬屶隔議惹否勣箔?
宸倖亅咏短嗤峺協否匂戦item頁泌採贋刈議賜採嶽窃侏頁塋俯議。宸倖亅咏峪峺協眉倖販採恆儉Container窃侏侭駅倬屶隔議孔嬬泣。匯倖恆儉議窃侏匆辛參戻工凪麿駆翌議孔嬬?峪勣諾怎宸眉倖訳周。
販採恆儉Container亅咏議窃侏駅倬峺協贋刈壓凪戦中議峙窃侏?駅倬隠屬峪嗤屎鳩窃侏議items辛參紗序否匂戦?駅倬苧鳩辛參宥狛凪和炎卦指item窃侏。
葎阻協吶宸眉倖訳周?Container亅咏俶勣匯倖圭隈峺協否匂戦議圷殆繍氏隠藻?遇音俶勣岑祇蒙協否匂議窃侏。Container亅咏俶勣峺協販採宥狛append圭隈耶紗欺否匂戦議峙才否匂戦圷殆頁屢揖窃侏?旺拝宥狛否匂和炎卦指議否匂圷殆窃侏議峙議窃侏頁屢揖窃侏。
葎阻器欺緩朕議?Container亅咏蕗苧阻匯倖ItemType議購選窃侏?亟恬typealias ItemType。宸倖亅咏音氏協吶ItemType頁恆儉窃侏侭戻工議採嶽佚連議艶兆。勝砿泌緩?ItemType艶兆屶隔匯嶽圭隈紛艶壓匯倖否匂戦議items窃侏?參式協吶匯嶽聞喘壓append圭隈才和炎嶄議窃侏?參宴隠屬販採豚李議Container議佩葎頁膿崙來議。
宸戦頁匯倖壼念IntStack窃侏議掲刑侏井云?癖喘噐恆儉Container亅咏?
IntStack窃侏糞孖阻Container亅咏議侭嗤眉倖勣箔?壓IntStack窃侏議耽倖淫根何蛍議孔嬬脅諾怎宸乂勣箔。
緩翌?IntStack峺協阻Container議糞孖?癖喘議ItemType瓜喘恬Int窃侏。斤噐宸倖Container亅咏糞孖遇冱?協吶typealias ItemType = Int?繍渇嵆議ItemType窃侏廬算葎醤悶議Int窃侏。
湖仍Swift窃侏歌深?低音喘壓IntStack協吶何蛍蕗苧匯倖醤悶議Int議ItemType。喇噐IntStack恆儉Container亅咏議侭嗤勣箔?峪勣宥狛酒汽議臥孀append圭隈議item歌方窃侏才和炎卦指議窃侏?Swift祥辛參容僅竃栽癖議ItemType栖聞喘。鳩糞?泌惚貧中議旗鷹嶄低評茅阻 typealias ItemType = Int宸匯佩?匯俳挽症辛參垢恬?咀葎万賠萱議岑祇ItemType聞喘議頁採嶽窃侏。
低匆辛參伏撹恆儉Container亅咏議刑侏Stack窃侏?
宸倖扮昨?准泣窃侏歌方T瓜喘恬append圭隈議item歌方才和炎議卦指窃侏。Swift咀緩辛參容僅竃瓜喘恬宸倖蒙協否匂議ItemType議T議栽癖窃侏。
Swift議Array厮将戻工append圭隈?匯倖count奉來才宥狛和炎栖臥孀匯倖徭失議圷殆。宸眉倖孔嬬脅器欺Container亅咏議勣箔。匆祥吭龍彭低辛參制婢Array肇恆儉Container亅咏?峪勣宥狛酒汽蕗苧Array癖喘噐乎亅咏遇厮。泌採糞樹宸劔匯倖腎制婢?壓Declaring Protocol Adoption with an Extension嶄嗤宙峰宸劔匯倖糞孖匯倖腎制婢議佩葎?
泌揖貧中議刑侏Stack窃侏匯劔?Array議append圭隈才和炎隠屬Swift辛參容僅竃ItemType侭聞喘議癖喘議窃侏。協吶阻宸倖制婢朔?低辛參繍販採Array輝恬Container栖聞喘。
斤噐購選窃侏議協吶俶箔匆頁掲械嗤喘議。低辛參宥狛宸劔肇協吶where囂鞘恬葎匯倖窃侏歌方錦双議匯何蛍。匯倖where囂鞘聞低嬬校勣箔匯倖購選窃侏恆儉匯倖蒙協議亅咏?參式?賜?椎倖蒙協議窃侏歌方才購選窃侏辛參頁屢揖議。低辛亟匯倖where囂鞘?宥狛諸昧慧崔where購囚忖壓窃侏歌方錦双朔中?凪朔効彭匯倖賜宀謹倖寞斤購選窃侏議埃崩?參式?賜?匯倖賜謹倖窃侏才購選窃侏議吉噐購狼。
和中議双徨協吶阻匯倖兆葎allItemsMatch議刑侏痕方?喘栖殊臥頁倦曾倖Container汽箭淫根醤嗤屢揖乏會議屢揖items。泌惚謄塘欺侭嗤議items?椎担卦指匯倖葎true議Boolean峙?郡岻?夸屢郡。
宸曾倖否匂辛參瓜殊臥竃頁倦頁屢揖窃侏議否匂?埋隼万断辛參頁??徽麿断鳩糞啜嗤屢揖窃侏議items。宸倖俶箔宥狛匯倖窃侏埃崩才where囂鞘潤栽栖燕幣?
宸倖痕方喘阻曾倖歌方?someContainer才anotherContainer。someContainer歌方頁窃侏C1?anotherContainer歌方頁窃侏C2。C1才C2頁否匂議曾倖准泣窃侏歌方?畳協阻宸倖痕方採扮瓜距喘。
宸倖痕方議窃侏歌方双諸昧壓曾倖窃侏歌方俶箔議朔中?
及眉倖才及膨倖勣箔瓜協吶葎匯倖where囂鞘議匯何蛍?亟壓購囚忖where朔中?恬葎痕方窃侏歌方全議匯何蛍。
宸乂勣箔吭房頁?someContainer頁匯倖C1窃侏議否匂。 anotherContainer頁匯倖C2窃侏議否匂。 someContainer才anotherContainer淫根屢揖議items窃侏。 someContainer嶄議items辛參宥狛音吉噐荷恬(!=)栖殊臥万断頁倦泳緩音揖。
及眉倖才及膨倖勣箔潤栽軟栖議吭房頁anotherContainer嶄議items匆辛參宥狛 != 荷恬栖殊臥?咀葎麿断壓someContainer嶄items鳩糞頁屢揖議窃侏。
宸乂勣箔嬬校聞allItemsMatch痕方曳熟曾倖否匂?軸宴麿断頁音揖議否匂窃侏。
allItemsMatch遍枠殊臥曾倖否匂頁倦啜嗤揖劔方朕議items?泌惚麿断議items方朕音揖?短嗤一隈序佩謄塘?痕方祥氏false。
殊臥頼岻朔?痕方宥狛for-in儉桟才磯液曝寂荷恬(..)栖亨旗someContainer嶄議侭嗤items。斤噐耽倖item?痕方殊臥頁倦someContainer嶄議item音吉噐斤哘議anotherContainer嶄議item?泌惚宸曾倖items音吉?夸宸曾倖否匂音謄塘?卦指false。
泌惚儉桟悶潤崩朔隆窟孖短嗤販採議音謄塘?椎燕苧曾倖否匂謄塘?痕方卦指true。
宸戦處幣阻allItemsMatch痕方塰麻議狛殻?
貧中議箭徨幹秀匯倖Stack汽箭栖贋刈String?隼朔儿阻眉倖忖憲堪序媚。宸倖箭徨匆幹秀阻匯倖Array汽箭?旺兜兵晒淫根眉倖揖媚戦匯劔議圻兵忖憲堪。軸宴媚才方怏倦頁音揖議窃侏?徽麿断脅恆儉Container亅咏?遇拝麿断脅淫根揖劔議窃侏峙。低咀緩辛參距喘allItemsMatch痕方?喘宸曾倖否匂恬葎万議歌方。壓貧中議箭徨嶄?allItemsMatch痕方屎鳩議?塋樵頬窠亠蔦眩集殭歹澶?items謄塘。
刑侏頁Swift俶勣膿寄蒙尢嶄議凪嶄匯倖?俯謹Swift炎彈垂頁宥狛刑侏旗鷹更秀竃栖議。並糞貧?低厮将聞喘刑侏香刊彭屁倖Language Guide?軸宴低短嗤糞孖万。箭泌?Swift議Array才Dictionary窃侏脅頁刑侏鹿。低辛參幹秀匯倖Int方怏?匆辛幹秀匯倖String方怏?賜宀封崛噐辛參頁販採凪麿Swift議窃侏方象方怏。揖劔議?低匆辛參幹秀贋刈販採峺協窃侏議忖灸(dictionary)?遇拝宸乂窃侏辛參頁短嗤尫崙議。
刑侏侭盾畳議諒籾
宸戦頁匯倖炎彈議?掲刑侏痕方swapTwoInts,喘栖住算曾倖Int峙?func swapTwoInts(inout a: Int, inout b: Int) let temporaryA = a a = b b = temporaryA }
swapTwoInts痕方辛參住算b議圻兵峙欺a?匆辛參住算a議圻兵峙欺b?低辛參距喘宸倖痕方住算曾倖Int延楚峙?
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
println("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3"
func swapTwoStrings(inout a: String, inout b: String) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoDoubles(inout a: Double, inout b: Double) {
let temporaryA = a
a = b
b = temporaryA
}
徽糞縞哘喘嶄宥械俶勣匯倖喘侃厚膿寄旺拝勝辛嬬議深打欺厚謹議痩試來汽倖痕方?辛參喘栖住算曾倖販採窃侏峙?載侑塰議頁?刑侏旗鷹逸低盾畳阻宸嶽諒籾。?匯倖宸嶽刑侏痕方朔中厮将協吶挫阻。?
刑侏痕方
刑侏痕方辛參垢恬噐販採窃侏?宸戦頁匯倖貧中swapTwoInts痕方議刑侏井云?喘噐住算曾倖峙?
func swapTwoValues<T>(inout a: T, inout b: T) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoInts(inout a: Int, inout b: Int) func swapTwoValues<T>(inout a: T, inout b: T)
総翌匯倖音揖岻侃壓噐宸倖刑侏痕方兆朔中効彭議准泣窃侏兆(T)頁喘錫凄催凄軟栖議()。宸倖錫凄催御盆Swift椎倖T頁swapTwoValues痕方侭協吶議匯倖准泣窃侏。咀葎T頁匯倖准泣?Swift音氏肇臥孀耽匯倖凋兆葎T議糞縞窃侏。
swapTwoValues痕方茅阻峪勣勧秘議曾倖販採窃侏峙頁揖匯窃侏翌?匆辛參恬葎swapTwoInts痕方瓜距喘。耽肝swapTwoValues瓜距喘?T侭旗燕議窃侏峙脅氏勧公痕方。
壓和中議曾倖箭徨嶄,T蛍艶旗燕Tnt才String?
var someInt = 3 var anotherInt = 107 swapTwoValues(&someInt, &anotherInt) // someInt is now 107, and anotherInt is now 3 var someString = "hello" var anotherString = "world" swapTwoValues(&someString, &anotherString) // someString is now "world", and anotherString is now "hello"
窃侏歌方
壓貧中議swapTwoValues箭徨嶄?准泣窃侏T頁匯嶽窃侏歌方議幣箭。窃侏歌方峺協旺凋兆葎匯倖准泣窃侏?旺拝諸昧壓痕方兆朔中?旺喘匯斤錫凄催凄軟栖?泌?。匯稀匯倖窃侏歌方瓜峺協?椎担凪辛參瓜聞喘栖協吶匯倖痕方議歌方窃侏?泌swapTwoValues痕方嶄議歌方a才b??賜恬葎匯倖痕方卦指窃侏?賜喘恬痕方麼悶嶄議廣瞥窃侏。壓宸嶽秤趨和?瓜窃侏歌方侭旗燕議准泣窃侏音砿痕方販採扮昨瓜距喘?脅氏瓜糞縞窃侏侭紋算?壓貧中swapTwoValues箭徨嶄?輝痕方及匯肝瓜距喘扮?T瓜Int紋算?及屈肝距喘扮?瓜String紋算?。
低辛屶隔謹倖窃侏歌方?凋兆壓錫凄催嶄?喘矯催蛍蝕。
凋兆窃侏歌方
壓酒汽議秤趨和?刑侏痕方賜刑侏窃侏俶勣峺協匯倖准泣窃侏?泌貧中議swapTwoValues刑侏痕方?賜匯倖贋刈汽匯窃侏議刑侏鹿?泌Array??宥械喘匯汽倖忖銚T栖凋兆窃侏歌方。音狛?低辛參聞喘販採嗤丼議炎紛憲栖恬葎窃侏歌方兆。泌惚低聞喘謹倖歌方協吶厚鹸墫議刑侏痕方賜刑侏窃侏?椎担聞喘厚謹議宙峰窃侏歌方頁掲械嗤喘議。箭泌?Swift忖灸(Dictionary)窃侏嗤曾倖窃侏歌方?匯倖頁key?総翌匯倖頁峙。泌惚低徭失亟忖灸?低賜俯氏協吶宸曾倖窃侏歌方葎KeyType才ValueType?喘栖芝廖万断壓低議刑侏旗鷹嶄議恬喘。
刑侏窃侏
宥械壓刑侏痕方嶄?Swift塋俯低協吶低徭失議刑侏窃侏。宸乂徭協吶窃、潤更悶才旦訟恬喘噐販採窃侏?泌揖Array才Dictionary議喘隈。宸何蛍?低婢幣泌採亟匯倖刑侏鹿窃侏-Stack(媚)。匯倖媚頁匯狼双峙囃議鹿栽?才array(方怏)屢貌?徽凪頁匯倖曳Swift議Array窃侏厚謹尫崙議鹿栽。匯倖方怏辛參塋俯凪戦中販採了崔議峨秘/評茅荷恬?遇媚?峪塋俯?峪塋俯壓鹿栽議挑極耶紗仟議??泌揖push匯倖仟峙序媚?。揖劔議匯倖媚匆峪嬬貫挑極卞茅??泌揖pop匯倖峙竃媚?。
和夕婢幣阻匯倖媚議儿媚(push)/竃媚(pop)議佩葎?
緩侃補秘夕頭議宙峰
- 孖壓嗤眉倖峙壓媚嶄?
- 及膨倖峙“pushed”欺媚議競何?
- 孖壓嗤膨倖峙壓媚嶄?恷除議椎倖壓競何?
- 媚嶄恷競何議椎倖?瓜卞茅?賜各岻葎“popped”?
- 卞茅渠匯倖峙朔?孖壓媚嗽嶷仟峪嗤眉倖峙。
struct IntStack {
var items = Int[]()
mutating func push(item: Int) {
items.append(item)
}
mutating func pop() -> Int {
return items.removeLast()
}
}
貧中侭婢孖議IntStack窃侏峪嬬喘噐Int峙?音狛?凪斤噐協吶匯倖刑侏Stack窃?辛參侃尖販採窃侏峙議媚?頁掲械嗤喘議。
宸戦頁匯倖屢揖旗鷹議刑侏井云?
struct Stack<T> {
var items = T[]()
mutating func push(item: T) {
items.append(item)
}
mutating func pop() -> T {
return items.removeLast()
}
}
T協吶阻匯倖兆葎“蝶嶽窃侏T”議准泣戻工公朔栖喘。宸嶽繍栖窃侏辛參壓潤更悶議協吶戦販採仇圭燕幣葎“T”。壓宸嶽秤趨和?T壓泌和眉倖仇圭瓜喘恬准泣?
- 幹秀匯倖兆葎items議奉來?聞喘腎議T窃侏峙方怏斤凪序佩兜兵晒?
- 峺協匯倖淫根匯倖歌方兆葎item議push圭隈?乎歌方駅倬頁T窃侏?
- 峺協匯倖pop圭隈議卦指峙?乎卦指峙繍頁匯倖T窃侏峙。
輝幹秀匯倖仟汽箭旺兜兵晒扮? 宥狛喘匯斤諸昧壓窃侏兆朔議錫凄催戦亟竃糞縞峺協媚喘欺窃侏?幹秀匯倖Stack糞箭?揖幹秀Array才Dictionary匯劔?
var stackOfStrings = Stack<String>()
stackOfStrings.push("uno")
stackOfStrings.push("dos")
stackOfStrings.push("tres")
stackOfStrings.push("cuatro")
// 孖壓媚厮将嗤4倖string阻
緩侃補秘夕頭議宙峰
貫媚嶄pop旺卞茅峙"cuatro"?
let fromTheTop = stackOfStrings.pop() // fromTheTop is equal to "cuatro", and the stack now contains 3 strings
緩侃補秘夕頭議宙峰
喇噐Stack頁刑侏窃侏?侭參壓Swift嶄凪辛參喘栖幹秀販採嗤丼窃侏議媚?宸嶽圭塀泌揖Array才Dictionary。
窃侏埃崩
swapTwoValues痕方才Stack窃侏辛參恬喘噐販採窃侏?音狛?嗤議扮昨斤聞喘壓刑侏痕方才刑侏窃侏貧議窃侏膿崙埃崩葎蝶嶽蒙協窃侏頁掲械嗤喘議。窃侏埃崩峺協阻匯倖駅倬写覚徭峺協窃議窃侏歌方?賜宀恆儉匯倖蒙協議亅咏賜亅咏更撹。箭泌?Swift議Dictionary窃侏斤恬喘噐凪keys議窃侏恂阻乂尫崙。壓Dictionaries議宙峰嶄?忖灸議keys窃侏駅倬頁hashable?匆祥頁傍?駅倬嗤匯嶽圭隈辛參聞凪頁率匯議燕幣。Dictionary岻侭參俶勣凪keys頁hashable頁葎阻參宴噐凪殊臥凪頁倦淫根蝶倖蒙協key議峙。泌涙緩俶箔?Dictionary軸音氏御盆頁倦峨秘賜宀紋算阻蝶倖蒙協key議峙?匆音嬬臥孀欺厮将贋刈壓忖灸戦中議公協key峙。
宸倖俶箔膿崙紗貧匯倖窃侏埃崩恬喘噐Dictionary議key貧?輝隼凪key窃侏駅倬恆儉Hashable亅咏?Swift炎彈垂嶄協吶議匯倖蒙協亅咏?。侭嗤議Swift児云窃侏?泌String?Int? Double才 Bool?潮範脅頁hashable。
輝低幹秀徭協吶刑侏窃侏扮?低辛參協吶低徭失議窃侏埃崩?輝隼?宸乂埃崩勣屶隔刑侏園殻議膿薦蒙尢嶄議謹方。渇嵆古廷泌Hashtable醤嗤議窃侏蒙尢頁功象麿断古廷蒙尢栖順協議?遇音頁麿断議岷俊窃侏蒙尢。
窃侏埃崩囂隈
低辛參亟匯倖壓匯倖窃侏歌方兆朔中議窃侏埃崩?宥狛丹催蛍護?栖恬葎窃侏歌方全議匯何蛍。宸嶽恬喘噐刑侏痕方議窃侏埃崩議児粥囂隈泌和侭幣?才刑侏窃侏議囂隈屢揖??
func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {
// function body goes here
}
窃侏埃崩佩葎
宸戦嗤倖兆葎findStringIndex議掲刑侏痕方?乎痕方孔嬬頁肇臥孀淫根匯公協String峙議方怏。飛臥孀欺謄塘議忖憲堪?findStringIndex痕方卦指乎忖憲堪壓方怏嶄議沫哈峙?Int??郡岻夸卦指nil?
func findStringIndex(array: String[], valueToFind: String) -> Int? {
for (index, value) in enumerate(array) {
if value == valueToFind {
return index
}
}
return nil
}
let strings = ["cat", "dog", "llama", "parakeet", "terrapin"]
if let foundIndex = findStringIndex(strings, "llama") {
println("The index of llama is \(foundIndex)")
}
// prints "The index of llama is 2"
宸戦婢幣泌採亟匯倖低賜俯豚李議findStringIndex議刑侏井云findIndex。萩廣吭宸倖痕方挽隼卦指Int?頁音頁嗤泣痴雌椿?遇音頁刑侏窃侏?椎頁咀葎痕方卦指議頁匯倖辛僉議沫哈方?遇音頁貫方怏嶄誼欺議匯倖辛僉峙。俶勣戻佰議頁?宸倖痕方音氏園咎?圻咀壓箭徨朔中氏傍苧?
func findIndex<T>(array: T[], valueToFind: T) -> Int? {
for (index, value) in enumerate(array) {
if value == valueToFind {
return index
}
}
return nil
}
音狛?侭嗤議宸乂旺音氏斑厘断涙貫和返。Swift炎彈垂嶄協吶阻匯倖Equatable亅咏?乎亅咏勣箔販採恆儉議窃侏糞孖吉塀憲(==)才音吉憲(!=)斤販採曾倖乎窃侏序佩曳熟。侭嗤議Swift炎彈窃侏徭強屶隔Equatable亅咏。
販採Equatable窃侏脅辛參芦畠議聞喘壓findIndex痕方嶄?咀葎凪隠屬屶隔吉塀荷恬。葎阻傍苧宸倖並糞?輝低協吶匯倖痕方扮?低辛參亟匯倖Equatable窃侏埃崩恬葎窃侏歌方協吶議匯何蛍?
func findIndex<T: Equatable>(array: T[], valueToFind: T) -> Int? {
for (index, value) in enumerate(array) {
if value == valueToFind {
return index
}
}
return nil
}
findIndex痕方孖壓夸辛參撹孔議園咎狛?旺拝恬喘噐販採恆儉Equatable議窃侏?泌Double賜String?
let doubleIndex = findIndex([3.14159, 0.1, 0.25], 9.3) // doubleIndex is an optional Int with no value, because 9.3 is not in the array let stringIndex = findIndex(["Mike", "Malcolm", "Andrea"], "Andrea") // stringIndex is an optional Int containing a value of 2
購選窃侏
輝協吶匯倖亅咏扮?嗤議扮昨蕗苧匯倖賜謹倖購選窃侏恬葎亅咏協吶議匯何蛍頁掲械嗤喘議。匯倖購選窃侏公協恬喘噐亅咏何蛍議窃侏匯倖准泣兆?賜艶兆?。恬喘噐購選窃侏貧糞縞窃侏頁音俶勣峺協議?岷欺乎亅咏俊鞭。購選窃侏瓜峺協葎typealias購囚忖。購選窃侏佩葎
宸戦頁匯倖Container亅咏議箭徨?協吶阻匯倖ItemType購選窃侏?
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
- 駅倬辛嬬宥狛append圭隈耶紗匯倖仟item欺否匂戦?
- 駅倬辛嬬宥狛聞喘count奉來資函否匂戦items議方楚?旺卦指匯倖Int峙?
- 駅倬辛嬬宥狛否匂議Int沫哈峙和炎辛參殊沫欺耽匯倖item。
宸倖亅咏短嗤峺協否匂戦item頁泌採贋刈議賜採嶽窃侏頁塋俯議。宸倖亅咏峪峺協眉倖販採恆儉Container窃侏侭駅倬屶隔議孔嬬泣。匯倖恆儉議窃侏匆辛參戻工凪麿駆翌議孔嬬?峪勣諾怎宸眉倖訳周。
販採恆儉Container亅咏議窃侏駅倬峺協贋刈壓凪戦中議峙窃侏?駅倬隠屬峪嗤屎鳩窃侏議items辛參紗序否匂戦?駅倬苧鳩辛參宥狛凪和炎卦指item窃侏。
葎阻協吶宸眉倖訳周?Container亅咏俶勣匯倖圭隈峺協否匂戦議圷殆繍氏隠藻?遇音俶勣岑祇蒙協否匂議窃侏。Container亅咏俶勣峺協販採宥狛append圭隈耶紗欺否匂戦議峙才否匂戦圷殆頁屢揖窃侏?旺拝宥狛否匂和炎卦指議否匂圷殆窃侏議峙議窃侏頁屢揖窃侏。
葎阻器欺緩朕議?Container亅咏蕗苧阻匯倖ItemType議購選窃侏?亟恬typealias ItemType。宸倖亅咏音氏協吶ItemType頁恆儉窃侏侭戻工議採嶽佚連議艶兆。勝砿泌緩?ItemType艶兆屶隔匯嶽圭隈紛艶壓匯倖否匂戦議items窃侏?參式協吶匯嶽聞喘壓append圭隈才和炎嶄議窃侏?參宴隠屬販採豚李議Container議佩葎頁膿崙來議。
宸戦頁匯倖壼念IntStack窃侏議掲刑侏井云?癖喘噐恆儉Container亅咏?
struct IntStack: Container {
// original IntStack implementation
var items = Int[]()
mutating func push(item: Int) {
items.append(item)
}
mutating func pop() -> Int {
return items.removeLast()
}
// conformance to the Container protocol
typealias ItemType = Int
mutating func append(item: Int) {
self.push(item)
}
var count: Int {
return items.count
}
subscript(i: Int) -> Int {
return items[i]
}
}
緩翌?IntStack峺協阻Container議糞孖?癖喘議ItemType瓜喘恬Int窃侏。斤噐宸倖Container亅咏糞孖遇冱?協吶typealias ItemType = Int?繍渇嵆議ItemType窃侏廬算葎醤悶議Int窃侏。
湖仍Swift窃侏歌深?低音喘壓IntStack協吶何蛍蕗苧匯倖醤悶議Int議ItemType。喇噐IntStack恆儉Container亅咏議侭嗤勣箔?峪勣宥狛酒汽議臥孀append圭隈議item歌方窃侏才和炎卦指議窃侏?Swift祥辛參容僅竃栽癖議ItemType栖聞喘。鳩糞?泌惚貧中議旗鷹嶄低評茅阻 typealias ItemType = Int宸匯佩?匯俳挽症辛參垢恬?咀葎万賠萱議岑祇ItemType聞喘議頁採嶽窃侏。
低匆辛參伏撹恆儉Container亅咏議刑侏Stack窃侏?
struct Stack<T>: Container {
// original Stack<T> implementation
var items = T[]()
mutating func push(item: T) {
items.append(item)
}
mutating func pop() -> T {
return items.removeLast()
}
// conformance to the Container protocol
mutating func append(item: T) {
self.push(item)
}
var count: Int {
return items.count
}
subscript(i: Int) -> T {
return items[i]
}
}
制婢匯倖贋壓議窃侏葎匯峺協購選窃侏
壓Adding Protocol Conformance with an Extension嶄嗤宙峰制婢匯倖贋壓議窃侏耶紗恆儉匯倖亅咏。宸倖窃侏淫根匯倖購選窃侏議亅咏。Swift議Array厮将戻工append圭隈?匯倖count奉來才宥狛和炎栖臥孀匯倖徭失議圷殆。宸眉倖孔嬬脅器欺Container亅咏議勣箔。匆祥吭龍彭低辛參制婢Array肇恆儉Container亅咏?峪勣宥狛酒汽蕗苧Array癖喘噐乎亅咏遇厮。泌採糞樹宸劔匯倖腎制婢?壓Declaring Protocol Adoption with an Extension嶄嗤宙峰宸劔匯倖糞孖匯倖腎制婢議佩葎?
extension Array: Container {}
Where 囂鞘
Type Constraints嶄宙峰議窃侏埃崩鳩隠低協吶購噐窃侏歌方議俶箔才匯刑侏痕方賜窃侏嗤購選。斤噐購選窃侏議協吶俶箔匆頁掲械嗤喘議。低辛參宥狛宸劔肇協吶where囂鞘恬葎匯倖窃侏歌方錦双議匯何蛍。匯倖where囂鞘聞低嬬校勣箔匯倖購選窃侏恆儉匯倖蒙協議亅咏?參式?賜?椎倖蒙協議窃侏歌方才購選窃侏辛參頁屢揖議。低辛亟匯倖where囂鞘?宥狛諸昧慧崔where購囚忖壓窃侏歌方錦双朔中?凪朔効彭匯倖賜宀謹倖寞斤購選窃侏議埃崩?參式?賜?匯倖賜謹倖窃侏才購選窃侏議吉噐購狼。
和中議双徨協吶阻匯倖兆葎allItemsMatch議刑侏痕方?喘栖殊臥頁倦曾倖Container汽箭淫根醤嗤屢揖乏會議屢揖items。泌惚謄塘欺侭嗤議items?椎担卦指匯倖葎true議Boolean峙?郡岻?夸屢郡。
宸曾倖否匂辛參瓜殊臥竃頁倦頁屢揖窃侏議否匂?埋隼万断辛參頁??徽麿断鳩糞啜嗤屢揖窃侏議items。宸倖俶箔宥狛匯倖窃侏埃崩才where囂鞘潤栽栖燕幣?
func allItemsMatch<
C1: Container, C2: Container
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable>
(someContainer: C1, anotherContainer: C2) -> Bool {
// check that both containers contain the same number of items
if someContainer.count != anotherContainer.count {
return false
}
// check each pair of items to see if they are equivalent
for i in 0..someContainer.count {
if someContainer[i] != anotherContainer[i] {
return false
}
}
// all items match, so return true
return true
}
宸倖痕方議窃侏歌方双諸昧壓曾倖窃侏歌方俶箔議朔中?
- C1駅倬恆儉Container亅咏 (亟恬 C1: Container)。
- C2駅倬恆儉Container亅咏 (亟恬 C2: Container)。
- C1議ItemType揖劔頁C2議ItemType?亟恬 C1.ItemType == C2.ItemType?。
- C1議ItemType駅倬恆儉Equatable亅咏 (亟恬 C1.ItemType: Equatable)。
及眉倖才及膨倖勣箔瓜協吶葎匯倖where囂鞘議匯何蛍?亟壓購囚忖where朔中?恬葎痕方窃侏歌方全議匯何蛍。
宸乂勣箔吭房頁?someContainer頁匯倖C1窃侏議否匂。 anotherContainer頁匯倖C2窃侏議否匂。 someContainer才anotherContainer淫根屢揖議items窃侏。 someContainer嶄議items辛參宥狛音吉噐荷恬(!=)栖殊臥万断頁倦泳緩音揖。
及眉倖才及膨倖勣箔潤栽軟栖議吭房頁anotherContainer嶄議items匆辛參宥狛 != 荷恬栖殊臥?咀葎麿断壓someContainer嶄items鳩糞頁屢揖議窃侏。
宸乂勣箔嬬校聞allItemsMatch痕方曳熟曾倖否匂?軸宴麿断頁音揖議否匂窃侏。
allItemsMatch遍枠殊臥曾倖否匂頁倦啜嗤揖劔方朕議items?泌惚麿断議items方朕音揖?短嗤一隈序佩謄塘?痕方祥氏false。
殊臥頼岻朔?痕方宥狛for-in儉桟才磯液曝寂荷恬(..)栖亨旗someContainer嶄議侭嗤items。斤噐耽倖item?痕方殊臥頁倦someContainer嶄議item音吉噐斤哘議anotherContainer嶄議item?泌惚宸曾倖items音吉?夸宸曾倖否匂音謄塘?卦指false。
泌惚儉桟悶潤崩朔隆窟孖短嗤販採議音謄塘?椎燕苧曾倖否匂謄塘?痕方卦指true。
宸戦處幣阻allItemsMatch痕方塰麻議狛殻?
var stackOfStrings = Stack<String>()
stackOfStrings.push("uno")
stackOfStrings.push("dos")
stackOfStrings.push("tres")
var arrayOfStrings = ["uno", "dos", "tres"]
if allItemsMatch(stackOfStrings, arrayOfStrings) {
println("All items match.")
} else {
println("Not all items match.")
}
// prints "All items match."
<貧匯准
和匯准>