2016-04-04 16 views
1

SwiftのCoreDataに関する本を読んだときにいくつかのコードが見つかりました。私は以下のコードの意味について混乱しています。クロージャーをconfigurationBlock: NSFetchRequest ->() = { _ in }のように宣言するときの意味はなんですか?特に{_ in}の意味。Swiftでは「{_ in}」の意味は何ですか?

public static func fetchInContext(context: NSManagedObjectContext, @noescape configurationBlock: NSFetchRequest ->() = { _ in }) -> [Self] { 
    let request = NSFetchRequest(entityName: Self.entityName) 
    configurationBlock(request) 
    guard let result = try! context.executeFetchRequest(request) as? [Self] else { fatalError("Fetched objects have wrong type") } 
    return result 
} 
+1

オプションのクロージャ引数に '@noescape'を割り当てることができないという事実を回避するために使われるデフォルトの空のクロージャです。こちらをご覧ください:http://stackoverflow.com/questions/33779777/how-to-add-noescape-annotation-to- option-closure – Hamish

+0

@ Kurt1018私が答えた質問を元に戻してください。私はその質問に答えるために多くの苦労をした。回答した質問を削除するのは失礼です(あなたにはSOの質問をすることができません)。私を罰するためにあなたの答えを削除しないでください。 – matt

答えて

9

これは、1つのパラメータをとる空のクロージャです。最大限の形で、閉鎖は次のようになります。

{ parameter: Type -> ReturnType in 
    // Stuff it does 
} 

ReturnTypeは(ノーリターン)voidの場合、それは省略することができます。 Typeが推測できる場合は除外できます。 parameterが未使用の場合は、_に置き換えることができます。体がない場合、体はありません。

configurationBlock: NSFetchRequest ->() = { _ in }) 

configurationBlockNSFetchRequestを取り、何も返さない関数であり、そのデフォルト値は次のとおりです。この特定のケースで

{ _ in } 

を:あなたはこのを巻き上げるだからあなたが完了したらクロージャーは何もしません。これにより、OptionalにまとめずにconfigurationBlockをオプションにすることができます。 (私はどちらの方が良いかについて前後に進みますが、どちらもうまくいきます)

+0

詳細な説明をありがとうございます。私は完全にそれを理解しているし、デフォルトのパラメータで関数について何かをお読みください。新しいスウィフト言語に行くにはまだ長い道のりがあるように見えます。 – Kurt1018

関連する問題