Swiftでクロージャを使って完了ブロックを書く

ブロックの概念をうまく扱った後でも、ブロックの最も単純なもの以外を書きたいたびに構文を調fuckingblocksyntax.com).クロージャとして知られるSwiftのバージョンのブロックは、構文に対してはるかにクリーンで自然なアプローチを取ります。 だから、それ以上の騒ぎなしに、私の父が私に教えた方法でクロージャを学ぶ時間:完了ブロックを書くことによって。UIViewのanimation APIは、iOS開発者がブロックを使用する最も一般的な領域の1つです。 独自のメソッドを盲目的に記述する前に、Appleのコードサンプルの1つを使用して構文を理解してみてください。 以下はObjective-Cの例であり、Swiftで書かれたのと同じコードです:

Objective C:

Swift:

ウサギや近視眼的な開発者の狼狽には、キャレット(yet)は(まだ)Swiftではどこにも見つ 安らかに休む旧友は、あなたがキーワードinに置き換えられています。 クロージャのパラメータと戻り値の宣言が完了したら、キーワードinを使用します。 これは、私が望んでいた方法を知っていたら、オートコンプリートが入力されたものを表示すると、より理にかなっています:

UIView.animateWithDuration(duration: NSTimeInterval, animations: (() -> Void)?, completion: ((Bool) -> Void)?)

この構文に焦点を当てると、クロージャのパラメータと戻り値を適切に記述する方法が明らかになります:

{(parameters) -> (return type) in expression statements}

上記のSwiftコード例では、両方のanimation closuresがvoidを返したため、戻り値の型構文をすべて一緒に削除できました。 そのため、パラメータの()のみが表示されます。 最初のクロージャのようにパラメータがなくても、キーワードinの前にempty()が必要であることに注意してください。 彼らは必要です。 あなたはそれを覚えているので、太字。

さて、ここでは、完了クロージャを持つ独自のSwiftメソッドを書いてみましょう。 この投稿の下部にリンクされているGithubリポジトリでは、コードフェローのチームとSwiftのGithubクライアントアプリに取り組んでいます。 このプロジェクトでは、GithubのAPIへのすべての非同期ネットワーク呼び出しを処理するネットワークコントローラがあります。

クライアントの検索クエリからユーザーのリストを取得するメソッドを記述しましょう。 このメソッドには、ネットワーク呼び出しが終了したときに要求元のビューコントローラに知らせるための完了クロージャが必要であり、コレクションビューに

関数のシグネチャは次のようになります:

func searchUsersWithSearchTerm(searchTerm: String, completionClosure: (users :User) ->()) 

ここには二つのパラメータがあります:searchtermと呼ばれる文字列型と補完クロージャ。 Closureパラメータの構文に注意してください? 最初はクロージャの名前で、メソッドの後でそれを呼び出す方法であり、次にパラメータ(ユーザーの配列)、その後に戻り値(void)が続きます。 以下は、このメソッドの本体がどのように見えるかの近似です:

 //setup a NSMutableRequest with the correct API URL and parameters //setup a dataTask on our NSURLSession instance //once our datatask has successfully retrieved the data we wanted, and we have parsed through it to create an array of User Models, we call our completion closure like this: var users : User = //Parse the JSON data into Users completionClosure(users: users)

Swiftでcompletionクロージャを呼び出すことは、Objective-Cでcompletionブロックを呼び出すのとほぼ同じ方法です。 私は意図的にこの投稿をできるだけ短くするためにすべてのネットワークコードを省略しましたが、それがどのように機能するかを見ることに興味が 私たちは、近い将来にSwiftでネットワーク上のブログ記事を持っていることを計画しています。

最後に、SearchUsersViewControllerからこのメソッドをどのように呼び出すかを見てみましょう。

もう一つ注意したいことは、addOperationWithBlock()mainQueue()でどのように呼び出したかです。 クロージャが関数のシグネチャの最後のパラメータである場合は、特別な構文を使用してさらにきれいにすることができます。 これは末尾のクロージャと呼ばれます。 末尾のクロージャは、関数呼び出しの()の直後に書き込まれます。 以下は関数呼び出しで、最初に通常のクロージャを使用し、次に末尾のクロージャを使用します。

それは微妙な違いであり、両方の方法が機能します。 末尾のクロージャ構文を使用するには、関数の最後のパラメータでなければならないことを覚えておいてください。

今、あなたはSwiftのクロージャの基本的な構文を知っている必要があります。 クロージャのより高度なレベルのものについては、iBooksのSwiftプログラミング言語をチェックしてくださ それはそれらの上に全体のサブセクションを持っています。 そして、ここにgithubクライアントプロジェクトへのリンクがあります。

すでにSwiftの対応もありますfuckingblocksyntax.com あなたはそれを推測した、fuckingclosuresyntaxと呼ばれます。comそれは間違いなくあなたのブックマークバーに追加する価値がありますSwiftを学ぶように。

おはようございます。

プロの開発者になる準備はできていますか? 連絡を取る方法を見つける!

コメントを残す

メールアドレスが公開されることはありません。