Swift 什么是;{in};斯威夫特是什么意思?

Swift 什么是;{in};斯威夫特是什么意思?,swift,Swift,当我在Swift中读到一本关于CoreData的书时,我发现了一些代码。我对下面这段代码的含义感到困惑。像configurationBlock:NSFetchRequest->()={in}这样声明闭包的意义是什么。特别是{uin}的意思 public static func fetchInContext(context: NSManagedObjectContext, @noescape configurationBlock: NSFetchRequest -> () = { _ in

当我在Swift中读到一本关于CoreData的书时,我发现了一些代码。我对下面这段代码的含义感到困惑。像
configurationBlock:NSFetchRequest->()={in}
这样声明闭包的意义是什么。特别是{uin}的意思

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
}

这是一个接受一个参数的空闭包。在最完整的形式中,闭包如下所示:

{ parameter: Type -> ReturnType in 
  // Stuff it does
}
如果
ReturnType
为void(无返回),则可以将其忽略。如果可以推断出
类型
,则可以将其忽略。如果未使用
参数
,则可以将其替换为
。如果没有尸体,就没有尸体。因此,当你完成时,你会得到这样的结果:

{ _ in }
在这种情况下:

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

configurationBlock
是一个函数,它接受一个
NSFetchRequest
并且不返回任何内容,它的默认值是一个不执行任何操作的闭包。这使您可以将
configurationBlock
设置为可选,而无需将其封装在
可选
中。(我反复讨论我更喜欢哪种方法,但两者都很好。)

这是一个默认的空闭包,用于解决无法将
@noescape
分配给可选闭包参数的问题。请看这里:@Kurt1018请删除我回答的问题。我费了很大的劲才回答了那个问题。删除一个已回答的问题是不礼貌的(并且可能会禁止你就此提出问题)。你应该接受我的答案来奖励我,而不是删除你的答案来惩罚我。非常感谢你的详细解释。我完全理解这一点,然后阅读一些关于带有默认参数的函数的内容。看来我还有很长的路要走。