当我在Swift中读到一本关于CoreData的书时,我发现了一些代码。我对下面这段代码的含义感到困惑。在声明像configurationBlock: NSFetchRequest -> () = { _ in }
这样的闭包时的含义是什么。特别是{_ 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
}
答案 0 :(得分:12)
这是一个带有一个参数的空闭包。最完整的形式,闭包看起来像:
{ parameter: Type -> ReturnType in
// Stuff it does
}
如果ReturnType
无效(不返回),则可以将其遗漏。如果可以推断出Type
,则可以将其排除在外。如果未使用parameter
,则可以将其替换为_
。如果没有身体,就没有身体。所以当你完成时,你最终会这样:
{ _ in }
在这个具体案例中:
configurationBlock: NSFetchRequest -> () = { _ in })
configurationBlock
是一个接受NSFetchRequest
并且不返回任何内容的函数,它的默认值是一个什么都不做的闭包。这使您可以configurationBlock
可选,而无需将其包含在Optional
中。 (我来回讨论哪种方法我更喜欢,但两者都很好。)