什么" {_ in}"斯威夫特意味着什么?

时间:2016-04-04 16:00:11

标签: swift

当我在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
}

1 个答案:

答案 0 :(得分:12)

这是一个带有一个参数的空闭包。最完整的形式,闭包看起来像:

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

如果ReturnType无效(不返回),则可以将其遗漏。如果可以推断出Type,则可以将其排除在外。如果未使用parameter,则可以将其替换为_。如果没有身体,就没有身体。所以当你完成时,你最终会这样:

{ _ in }

在这个具体案例中:

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

configurationBlock是一个接受NSFetchRequest并且不返回任何内容的函数,它的默认值是一个什么都不做的闭包。这使您可以configurationBlock可选,而无需将其包含在Optional中。 (我来回讨论哪种方法我更喜欢,但两者都很好。)