「Swift 2の新機胜」䟋



Swift 2は、蚀語自䜓の改善、Objective-Cずの察話、およびコンパむルされたアプリケヌションのパフォヌマンスの改善に重点を眮いおいたした。 Swift 2の新機胜は、6぀の異なる領域で提䟛されたす。


Swift 2の新機胜に぀いお、 Githubにコヌドが蚘茉されおいるサンプルずずもに玹介したす。

1.基本的な蚀語構成


これ以䞊printlnはありたせん


通垞、コン゜ヌルにメッセヌゞを出力するにはprintln関数を䜿甚したした。 Swift 2では、 printのみを䜿甚したす 。 Appleはprintlnずprintの䞡方を1぀に結合したした。 print関数は、デフォルトでは、「\ n」改行文字を䜿甚しおメッセヌゞを印刷したす。 必芁に応じお、改行なしで行を印刷できたす。



地図 、 フィルタヌ 、䌚瀟


Swift 1.2のコレクションを介しおこれらの䟿利な関数ずメ゜ッドを定矩するこずは、完党に䞀貫しおいたせんでした。 Swift 1.2では、プロトコルでのデフォルトの実装は䞍可胜であり、拡匵はクラスに察しおのみ行われたため、 CollectionTypeプロトコルのマップメ゜ッドのデフォルトの実装はありたせんでした。 したがっお、郚分的には、 mapはArrayクラス CollectionTypeプロトコルを実装するのメ゜ッドずしお定矩され、 Setクラス CollectionTypeプロトコルを実装するでは定矩されおいたせん。 これに加えお、グロヌバルマップ関数が宣蚀されたした。これは、最初のパラメヌタヌずしおCollectionTypeのむンスタンスを取りたした。 これにより完党な混乱が生じたした。

// Swift 1.2 let a: [Int] = [1,2,3] //    map   Array let b = a.map{ $0 + 1 } //      map  map([1,2,3]) { $0 + 1 } let set = Set([1,2,3]) //  ,    map   Set set.map{ $0 + 1 } //   map   Set map(set) { $0 + 1 } 

コレクションのタむプに応じお、このコレクションのグロヌバルマップ関数たたはマップメ゜ッドのいずれかが䜿甚されるこずが刀明したした。 map 、 filter、およびreduceメ゜ッドず関数を䜿甚しお䞀連の倉換を䜿甚するず、䞀貫性がなく読みにくくなりたす。

Swift 2では、プロトコル拡匵が蚱可されおいるため、 map 、 filter coはCollectionTypeのプロトコルレベルでプロトコル拡匵ずしお実装されおいたす。 したがっお、同じメ゜ッドは、 Array 、 Set、たたはCollectionTypeプロトコルを実装する他のコレクションで動䜜したす。

 // Swift 2 let a: [Int] = [1,2,3] let b = a.map{ $0 + 1 } let set = Set([1,2,3]) let anotherSet = set.map{ $0 + 1 } let sum = (1...100) .filter { $0 % 2 != 0 } .map { $0 * 2 } .reduce(0) { $0 + $1 } print(sum) // prints out 5000 

䞊蚘の䟋では、 フィルタヌがRangeで機胜するこずがわかりたす。 以前のバヌゞョンでは、 RangeはCollectionTypeプロトコルを確認したしたが、 フィルタヌメ゜ッドは実装されおいなかったため、これは機胜したせんでした。 これで、あらゆるコレクションに察しお、これらのメ゜ッドの構文がはるかに理解しやすくなりたした。

列挙型列挙型


Swift 2では、 enumには印刷を可胜にするのに十分な反射情報がありたす。



printan句はDragonを正しく印刷するようになりたしたが、Swiftの以前のバヌゞョンでは、出力は完党に有益ではありたせんでしたEnum Value 。

enumに関するもう1぀の改善点は、Swiftがenumのさたざたなタむプの関連する倀の衚珟を蚱可するようになったこずです。 䟋ずしお、Eightのタむプを合法的に想像できるようになりたした。



これで、 enumは再垰的になりたす。぀たり、 enumを䜿甚しおツリヌを構築できたす。 この䟋を芋おみたしょう



ケヌスNodeの前に間接キヌワヌドを䜿甚する必芁がありたす。 これにより、ツリヌを䜜成できたした。



これは次のようなものです。



これで、ツリヌ党䜓を再垰的にトラバヌスし、数倀を远加する関数を䜜成できたす。



21の結果が印刷されたす。

蚺断


これに加えお、Swift 2は、䞍倉のstructメ゜ッドを䜿甚しおvarを倉曎しようずする開発者の詊みを正しく怜出する、初期化埌にvarプロパティが倉曎されない、たたは関数呌び出しの結果が無芖されたずきなど、など

最も単玔な倉曎の1぀により、コヌドが読みやすくなりたす。 ご存知のように、Swift開発者はvarを䜿甚する倉数ずしおではなく、 letを䜿甚する定数ずしお倚くのものを宣蚀するこずを奜みたす。 しかし、誀っおvarキヌワヌドを䜿甚した堎合はどうなりたすか たたは、倉曎する必芁があるず思いたしたが、倉曎したせんでしたか Xcode 7ずSwift 2はどちらも、コヌドのどこでもこの倉数を倉曎しないずいう譊告を衚瀺したす。Xcodeは、倉数の䜿甚方法を文字通り調べ、倉曎したかどうかを確実に把握したす。

耇数のオプション


倚くのオプションは倚くのブヌル倀を衚す方法であり、Swift 1.xでは次のようになりたした。

 viewAnimationOptions = nil viewAnimationOptions = .Repeat | .CurveEaseIn | .TransitionCurlUp if viewAnimationOptions & .TransitionCurlUp != nil { ... 

このタむプの構文はCocoaで広く䜿甚されおいたしたが、実際にはC蚀語の「遺物」に過ぎないため、Swift 2では削陀され、倚くのオプションに察する独自のタむプが提瀺されたす。これはOptionSetTypeプロトコルです。



そのため、倚くのオプションは、 Setたたはstructの任意のタむプになり、 OptionSetTypeプロトコルを確認できたす。 これにより、倚くのオプションを䜿甚する堎合の構文がより理解しやすくなりたす。



構文は、以前のバヌゞョンのようにビット挔算に䟝存せず、空のオプションセットを衚すためにnilを䜿甚したせん。

珟圚、倚くのOptionSetTypeオプションは、プロトコル拡匵のデフォルト実装ず呌ばれるSwift 2の別の機胜に䟝存しおいるため、 OptionSetTypeプロトコルを確認するだけで、たずえばcontainsメ゜ッドのデフォルト実装を取埗できたす。 minusInPlace 、 unionInPlaceおよびその他の集合挔算。 プロトコル拡匵に぀いおは、埌で説明したす。

関数ずメ゜ッド


関数ずメ゜ッドを宣蚀するためのSwift 1.x構文は、関数ぞの匕数にラベルがないCず、メ゜ッドの匕数にラベルを付けるObjective-Cからそれぞれ掟生した2぀の異なる芏則から継承されたした。 あなたはそのような宣蚀を持っおいたした

 func save(name: String, encrypt: Bool) { ... } class Widget { func save(name: String, encrypt: Bool) { ... } save("thing", false) widget.save("thing", encrypt: false) 

Swift 2では、䞊蚘のコヌドは次のようになりたす。



したがっお、関数はメ゜ッドず同じ芏則を取埗したした。


ただし、これらの倉曎は、CおよびObjective-C APIからむンポヌトされた関数には適甚されたせん。

さらに、Swift 1.xで同じ内郚名ず倖郚名を持぀パラメヌタヌを指定するために䜿甚されおいた#optionオプションが削陀されたため、パラメヌタヌラベルを宣蚀するモデルがより䟿利になりたした。

スコヌプ挔算子


新しいdo句により、開発者は倉数ず定数のスコヌプを明瀺的に定矩できたす。 これは、すでに宣蚀されおいる名前を再利甚する堎合や、䞀郚のリ゜ヌスの早期リリヌスに圹立぀堎合がありたす。 do句は次のようになりたす。



Swift 1.xの以前のバヌゞョンで導入されたdo ... while節ずのあいたいさを避けるために、Swift 2では埌者がrepeat ... whileに名前が倉曎されたした。

ナニットテスト


Swift 1.xの単䜓テストコヌドの問題は、Swift 1.xを䜿甚するず、単䜓テストで確認したいすべおのタグを公開するこずになりたす。 その結果、 パブリックマヌクは本来あるべきでない堎所に残りたす。 これはすべお、 テストタヌゲットがアプリケヌション タヌゲットず異なり、 内郚のアプリケヌションのファむルがテストタヌゲットで䜿甚できないためです。

Swift 2は、単䜓テストの倧幅な軜枛を達成したした。 Xcode 7は、特別な「テスト」モヌドでSwift 2コヌドを自動的にコンパむルしたす



すべおの内郚定矩がpublicずしお定矩されおいるかのようにアクセスしたす。 これは、モゞュヌルをむンポヌトするずきに@testable属性を䜿甚しお行われたす。



それだけで十分です。「 パブリック」ずいう蚀葉でラベルを付ける必芁はありたせん。

さらに、これらの倉曎はアプリケヌションのメむンリリヌスには圱響したせんが、パフォヌマンスずアクセス制埡の䞡方の点で正しい動䜜を維持したす。

2.蚈算の順序の管理


Swift 2では、蚈算順序の管理ず既存の蚭蚈の改善のための新しい抂念が導入されおいたす。

ガヌドオファヌ


ガヌド句は、 if句ず同様に、条件匏のブヌル倀に応じおコヌドを実行したす。 ブヌル倀がtrueの堎合 、 ガヌド句に続くコヌドの実行を継続するように、 ガヌド句を䜿甚したす。

guard句は、本質的にif句の逆です。 私たちが曞く堎合 

 if condition { // true  } else { // false  } 

guardの堎合、 trueブランチはfalseブランチよりも高いレベルに䞊昇したす 。

 guard condition else { // false  } // true  

falseブランチは、閉じたコンテキストで実行を終了し、倀を返すか゚ラヌをスロヌするこずに泚意しおください。 条件が満たされた堎合にのみ、 真のブランチのコヌドが実行されるこずを保蚌したす。

これにより、ネストされたif文によっお圢成される「スメトリピラミッド」を䜿甚せずに、条件を反転せずに、臎呜的でない前提条件をチェックする自然な方法がガヌドになりたす。

埓来のif句を䜿甚した堎合の兞型的なコヌド実行パスがどのようになるかを芋おみたしょう。



jsonDictディクショナリはcreatePersonFromJSON関数入力に提䟛され、関連情報がディクショナリで提䟛されおいる堎合はPerson構造の正しいむンスタンスが出力で䜜成され、そうでない堎合はnilが返されたす。 この関数は、Swift 1.2で芋られるように曞かれおいたす-if let構文を䜿甚したす。 このコヌドにはいく぀かの問題点がありたす。 たず、メむンコヌドからの正しい蚈算の方向を「オフにする」、぀たり、「成功」条件の芳点から蚈算の方向がif let句に「埋め蟌たれる」こずが刀明したした。 第二に、 createPersonFromJSON関数は 、必芁なずきに垞にPersonのむンスタンスを返すずは限りたせん。 Person構造には3぀のプロパティが含たれおおり、そのうちの1぀はOptionalです 。ただし、3぀のキヌすべおに぀いお蟞曞から非nil倀を取埗した堎合にのみ、関数は有効なPersonむンスタンスを返したす。 この関数を次のように曞き換えたしょう。アドレスが欠萜しおいる堎合、぀たりアドレスキヌがnilを返す堎合にPersonのむンスタンスを返すこずができるようにしたす。



機胜をわずかに改善したした。 このバヌゞョンのcreatePersonFromJSON2関数は、アドレスがnilであっおもPersonのむンスタンスを䜜成できるようになりたした。 これはPersonの構造をよりよく反映しおいたすが、珟圚では倚くのif句があり、 nameずageに割り圓おられた最終倀を拡匵する必芁がありたす。 新しいガヌドオファヌでこれをどのように改善できるか芋おみたしょう。



guard句の堎合、およびif let句の堎合 、倀の存圚を確認し、倀を「展開」しお定数に割り圓おるこずができたす。 ただし、 guard let構文を䜿甚するず、条件匏の評䟡がtrueの堎合、䞭括匧{}の埌にコヌドの実行が継続されたす 。 これは、远加の分岐コヌドを䜿甚しお倀を展開するこずなく、関数の通垞のスコヌプ内にPersonのむンスタンスを䜜成できるこずを意味したす。 nameたたはageの倀のいずれかがnilである堎合、コヌドはelse節にゞャンプし、 nilを早く返したす。

guardを簡単に芋おみたしょう。

。

延期条項



defer句は、 try句に関連付けられおおらず、どこでも䜿甚できるこずを陀いお、 最終的に他のプログラミング蚀語に䌌おいたす。 defer {...}ずコヌド内のどこかに曞くず、蚈算制埡がこの囲みスコヌプを離れるずこのブロックが実行され、コヌドが終了するか、リタヌンを受け取るか「スロヌ」するかは関係ありたせん「ミス。 deferステヌトメントは、 ガヌドおよび゚ラヌ凊理埌述でうたく機胜したす。

 guard let file1 = Open(...) else { //   file1 return } defer { file1.close() } guard let file2 = Open(...) else { //   file2 return } defer { file2.close() } //  file1  file2 . . . . . . . //      ,    

deferは、蚈算プロセスの通垞の過皋ずfile2で゚ラヌが発生した堎合の䞡方でfile1に察しお機胜するこずに泚意しおください。 これにより、コヌドから倚数の繰り返しが削陀され、蚈算ブランチで䜕かを「クリア」するこずを忘れないようになりたす。 ゚ラヌ凊理も同じ問題に盎面しおおり、この目的にはdefer句が最適です。

繰り返し-しばらく


Swift 2.0は、以前に䜿甚されおいたdo-while節に構文䞊の倉曎を加えたした。 do-whileの代わりに、 repeat-whileを取埗したす。



これらの倉曎には2぀の理由がありたす。

do-whileルヌプを䜿甚する堎合、これが繰り返しの構成であるこずはすぐにはわかりたせん。 これは、 do句内のコヌドブロックが倧きく、 while条件が画面倖にある堎合に特に圓おはたりたす。 これを軜枛するために、 doキヌワヌドはrepeatに眮き換えられたした。これにより、これはコヌドの繰り返しブロックであるこずがナヌザヌに明確になりたす。

doキヌワヌドには、Swift 2の新しい゚ラヌ凊理モデルに新しい目的がありたす。これに぀いおは埌で調査したす。

パタヌンマッチング


Swiftは垞に匷力なパタヌンマッチング機胜を備えおいたしたが、これはスむッチコンストラクトのみです。 スむッチコンストラクトは倀valueを調べ、いく぀かの可胜なパタヌンず比范したした。 switch句の欠点の1぀は、 valueのすべおの可胜なオプションを提䟛する必芁があるこずです 。぀たり、 switchステヌトメントは網矅的である必芁があり、これは䜿甚するのに䞍䟿です。 そのため、Swift 2は、以前はスむッチ/ケヌスのみが持っおいたパタヌンマッチング機胜を、蚈算の流れを制埡する他の提案に移怍したした。 ケヌスがそれらの1぀である堎合 、 スむッチを䜿甚しおコヌドをより簡単に曞き換えるこずができたす。 他の提案は、ケヌスずwhileケヌス甚です。

ケヌスの堎合のパタヌンマッチング


Swift 2の新機胜は、 if およびguard 句内でのパタヌンマッチングのサポヌトです。 最初に最も単玔な列挙䜓Numberを定矩しおから、その䜿甚方法を瀺したしょう。



1.特定のケヌスケヌスの確認


ケヌスを䜿甚したす。倀が特定のケヌスに䞀臎するかどうかを確認したす。 これは、このケヌスに倀が関連付けられおいるかどうかにかかわらず機胜したすが、倀は埩元されたせん存圚する堎合。



サンプルはcase .IntegerValueで始たり、このサンプルず䞀臎する倀である倉数myNumberは等号の埌に来たす。 これは盎芳に反するように思えるかもしれたせんが、 if let a = a1構成のオプション倀a1を「拡匵」するずきに同じこずがわかりたす。チェックされるa1の倀は等号の埌に来たす。

スむッチを䜿甚した同等のSwift 1.2バヌゞョンを次に瀺したす。



2.関連する倀を取埗する


caseを䜿甚したす。倀が特定のcaseに䞀臎するかどうかを確認し、関連する倀を抜出したす。



「パタヌン」は、 ケヌスlet .IntegerValuetheIntに倉わりたした 。 「パタヌン」に䞀臎する倀は、前の䟋ず同じです。

以䞋は同じ抂念を反映する䟋ですが、 guardを参照しおいたす。 guardずifの述語セマンティクスは同䞀であるため、 パタヌンマッチングは同じように機胜したす。



3. where句を䜿甚した遞択


guard節のどの堎合でも、远加の制限を提䟛するためにオプションの where節を远加できたす。 前の䟋のgetObjectInArrayatIndex関数を倉曎しおみたしょう。



4.マッチング範囲




5.タプルタプルを䜿甚する




6.述語が耇雑な堎合


Swift 2のif句は驚くほど機胜しおいたした。 カンマで区切られた倚くの述語を持぀こずができたす。 述語は、次の3぀のカテゎリのいずれかに分類されたす。


述語は定矩された順序で評䟡され、述語を実行しないず、残りは評䟡されたせん。

ケヌスのパタヌンマッチング


パタヌン 䞀臎は、 for -inルヌプず組み合わせお䜿甚​​できたす。 この堎合、私たちの意図は、シヌケンスの芁玠を通過するこずですが、特定の「パタヌン」に察応する芁玠のみを通過するこずです。 以䞋に䟋を瀺したす。



switch句の「パタヌン」ず同様に、倚くの関連する倀を抜出でき、この関連する倀に関心がない堎合は_を䜿甚できたす。 必芁に応じお、 where句を䜿甚しお制限を远加するこずもできたす。

パタヌンマッチング䞭


パタヌン マッチングは、 whileルヌプでも䜿甚できたす。 この堎合、述郚の特定の倀が「パタヌン」に察応するたで、ルヌプの本䜓を繰り返したす。 以䞋に䟋を瀺したす。



セクション「6.」で説明されおいる耇雑な述語に泚意しおください。 where ifの䜿甚を含む、述語もwhileルヌプでサポヌトされおいる堎合は耇雑です。

耇数のラップを解陀するためのパタヌン


Swift 1.2では、1぀のシンプルなif let句で耇数のオプションを「デプロむ」するための玠敵でコンパクトな構文がありたした。

 var optional1: String? var optional2: String? if let optional1 = optional1, let optional2 = optional2 { print("Success") } else { print("Failure") } 

わあ

ただし、既存の/欠萜しおいるオプションのティヌチングのさたざたな組み合わせを本圓に管理する必芁がある状況に盎面しおいたす。 そのような䟋の1぀は、 ナヌザヌ名ずパスワヌドのフィヌルドに入力するためのフォヌムであり、ナヌザヌはそれらのいずれかを入力せず、「送信」ボタンをクリックしたした。 この堎合、特別な゚ラヌを衚瀺しお、特にスキップされたものをナヌザヌに通知したす。 これを行うために、Swift 1.xでパタヌンスワッピングを䜿甚できたす

 var username: String? var password: String? switch (username, password) { case let (.Some(username), .Some(password)): print("Success!") case let (.Some(username), .None): print("Password is missing") case let (.None, .Some(password)): print("Username is missing") case (.None, .None): print("Both username and password are missing") } 

少し厄介ですが、最初から䜿甚しおいたした。

Swift 2では、構文はより明確に芋えたす。



䞀芋、疑問笊の䜿甚はわかりにくいですか 倀が存圚するこずを瀺すために特に、倀が存圚する堎合ず存圚しない堎合にOptionalsのアむデアに関連付けられおいる堎合、この䟋は䞍噚甚な.Someナヌザヌ名構文ずは察照的に非垞に理解しやすいこずを認める必芁がありたす。

゚ラヌ凊理


゚ラヌ凊理に関連するSwiftの新機胜を理解するには、関数が異垞終了する可胜性がある3぀の方法があるこずを芚えおおくず䟿利です以降、簡朔にするために、専門甚語に切り替えお「フォヌル」ず蚀いたす。


状況に関連した゚ラヌの第䞉のタむプの加工-スりィフト2.を改善しようずしおいる

関数は、匕数を受信したずき、我々はスりィフト1.xおよびObjective-Cの䞭の兞型的な制埡方匏このような゚ラヌを考慮した堎合、我々は、スキヌムを芋぀けるNSError inoutの操䜜の成功たたぱラヌ完了を衚すBoolを返したす。

 //  error  ,    var error: NSError? // success  Bool: let success = someString.writeToURL(someURL, atomically: true, encoding: NSUTF8StringEncoding, error: &error) if !success { //     error: println("Error writing to URL: \(error!)") } 

このアプロヌチには倚くの「ダヌク」な偎面があり、メ゜ッド自䜓が䜕をするのかを明確にしたせんが、さらに重芁なこずには、返されたBoolの背埌にあるものに぀いおは手動で芏玄を実装する必芁がありたす。メ゜ッドがオブゞェクトを返し、゚ラヌを受け取った堎合、nilを返したす。ブヌル倀の堎合、falseが返されたす。どのメ゜ッドを扱っおいるか、メ゜ッドにNSError゚ラヌオブゞェクトが含たれおいる堎合、結果がnilたたはfalseかどうかを確認する必芁がありたすか 。非垞にわかりにくい構文。これらの困難はすべお、Objective-Cが関数たたはメ゜ッドから倚くの倀を返すこずができなかったずいう事実に関連しおいたす。゚ラヌに぀いおナヌザヌに通知する必芁がある堎合は、そのような凊理方法を提䟛したす。

Swift 2には新しいバグ管理が远加されたした。NSErrorを眮き換えるdo-try-catch構文を䜿甚したす。この新しい構文の䜿甚方法を芋おみたしょう。このような゚ラヌを凊理する非垞に簡単な䟋を考えおみたしょう。これらの゚ラヌは、オプションの返品によっお返されたす。倀、および新しい構文は実際には意図されおいたせん。しかし、この䟋の単玔さにより、セマンティックコンテンツの耇雑さではなく、「スロヌアりト」および「キャッチ」゚ラヌのメカニズムに正確に泚意を向けるこずができたす。最埌に、ネットワヌクからのデヌタを凊理する実際の䟋を瀺したす。

゚ラヌをスロヌたたはキャッチする前に、゚ラヌを特定する必芁がありたす。あなたがでスりィフト2でそれを定矩するこずができたす列挙新しいプロトコルの実装、ERRORTYPEを



関数に



「»スロヌ゚ラヌを投げるこずができ、あなたは、関数ヘッダのキヌワヌドで広告を掲茉する必芁があるのthrows節



今、この機胜は、キヌワヌドを䜿甚しお、゚ラヌをスロヌするこずができたす投げるそしお、゚ラヌの特定の皮類ぞのリンク


この関数を呌び出すしようずした堎合、コンパむラぱラヌを生成したす。「ず呌ばれる関数が゚ラヌをスロヌし、それを参照するには、キヌワヌドマヌクされおいない詊みをしお䜕の゚ラヌ凊理はありたせん。」



の機胜は、゚ラヌをスロヌするこずが可胜であるこずを発衚したしたので、朜圚的な゚ラヌを「キャッチ」する必芁がありたす。レッツ・キヌワヌドを䜿甚しようず詊しお



それは十分ではなかった、コンパむラは、構文を䜿甚しお補造される必芁な゚ラヌハンドリング、ずいうこずを教えおくれるん-のtry-catchを


たた、ブロックで行う-のtry-catchあなたは「キャッチ」する機䌚を持っおいるいく぀かの゚ラヌ



゚ラヌのセマンティック郚分に興味がない堎合、do-try-catchコンストラクトを䜿甚する代わりに、関心のある倀をオプションずしお扱うこずができたす



aTryずaTrySuccessはオプションです。

特定の状況でのみ「萜ちる」こずができるメ゜ッドが存圚する堎合がありたすが、䜿甚方法によっお「萜ちる」こずはないこずは確かです。その埌、tryを䜿甚できたす 。

関数が゚ラヌを「スロヌ」するず、すぐに戻りたす。ただし、関数が戻る前にリ゜ヌスを解攟したりファむルを閉じたりするなど、䜕らかのアクションを実行する必芁がある堎合がありたす。この状況では、すでにおなじみのキヌワヌドdeferが正垞に機胜したす。キヌワヌドで延期関数が返す垞に実行されるコヌドのブロックを定矩するず、゚ラヌにより正垞か戻っおいるかどうかは関係ありたせん可胜。関数のどこにでもdeferブロック

を定矩できたす。さらに、耇数の遅延ブロックを定矩するこずもできたす。この堎合、それらは逆の順序で実行されたす。䟋を芋おみたしょう



Natasha Murashevの蚘事で玹介されおいる実際の䟋を怜蚎したす。 Swift 2.0やっおみたしょうか 。䞀郚のAPIからのデヌタを考慮したす逆シリアル化埌



このデヌタは、アプリケヌションで埌で䜿甚するためにモデルに倉換する必芁がありたすTodoItemParser



パヌサヌは、APIからの混合デヌタを凊理し、アプリケヌションで埌で安党に䜿甚できるように理解可胜なモデルに倉換し、゚ラヌを怜出するず「スロヌ」゚ラヌdo-try-catchコンストラクトを䜿甚しお「良い」デヌタをモデルに解析し、「悪い」デヌタを解析したす。do-try-catchコンストラクトを䜿甚する代わりに、tryステヌトメントで興味のある倀をオプションずしお扱うこずができたすか















最初の郚分では、Swift 2の新しい機胜の䞀郚のみを怜蚎したした。- 、スコヌプ、匕数構文

などの基本的な蚀語構造。-パタヌンマッチングパタヌンマッチング-゚ラヌ凊理゚ラヌ凊理第二郚では、我々は残りの郚分を芋おいきたす-アベむラビリティ可甚性利甚可胜なチェック-拡匵機胜゚クステンションをプロトコル-察話をObjective-Cのず参考文献䞭叀品新スりィフトに特城2 スりィフト2で私のようスりィフト2のA初心者のためのガむドスりィフト2.0での゚ラヌ凊理enumscoping















Swift 2.0: Let's try?
Video Tutorial: What's New in Swift 2 Part 4: Pattern Matching
Throw What Don't Throw
The Best of What's New in Swift

Source: https://habr.com/ru/post/J269171/


All Articles