[スウィフト]スウィフト@escapingと完了ハンドラ
こんにちは、私はより正確スウィフトの「閉鎖」を理解しよう。
しかし@escaping
とCompletion Handler
は、私は多くの投稿とスウィフトの公式文書を検索
理解するには余りにも難しいですが、私はSTIL感じられない。これは、公式文書のコード例である
十分
var completionHandlers: [()->Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping()->Void){
completionHandlers.append(completionHandler)
}
func someFunctionWithNoneescapingClosure(closure:()->Void){
closure()
}
class SomeClass{
var x:Int = 10
func doSomething(){
someFunctionWithEscapingClosure {
self.x = 100
//not excute yet
}
someFunctionWithNoneescapingClosure {
x = 200
}
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
completionHandlers.first?()
print(instance.x)
@esacpingを使用する2つの方法と理由があると聞きました
最初にdoSomething
がsomeFunctionWithEscapingClosure
が閉鎖パラメータで実行し、その閉鎖は、グローバル変数、配列に保存されます、次に実行する場合は閉鎖をtoring、第二には、非同期操作の目的
されて、今から、彼らは私の質問
まずあるの。
は私が閉鎖{self.x = 100}
どのようself
グローバル変数に保存されている{self.x = 100}でcompletionHandlers
instance
に接続できるSomeClass
のオブジェクトであることと思いますか?
第2に、私はこのようにsomeFunctionWithEscapingClosure
を理解しています。
グローバル変数 'completionHandlers`にローカル変数クロージャcompletionHandler
を格納するには、@escapingキーワードを使用してください!この権利は、キーワードsomeFunctionWithEscapingClosure
リターンを@escapingなし
、ローカル変数completionHandler
が
@escapingはメモリ
でその閉鎖を保つメモリからさ削除しますか?
最後に、私はこの文法の存在について疑問に思います。私たちは、なぜ我々だけ
は何をしている特定の関数呼び出しの後にいくつかの機能を呼び出すことはありませんいくつかの特定の機能
後に実行するいくつかの関数にしたい場合は
は多分これは非常に初歩的な質問
です上記パターンの使用とエスケープコールバック関数の使用の違い
長い質問をお読みいただきありがとうございます。私はネイティブではありません。
あなたのリンクは –
おかげで非常に有用だった、スウィフトにコーディング楽しみます –