使用Swift处理Objective-C块

时间:2014-06-11 17:05:49

标签: objective-c closures swift

我在新的Swift项目中使用Objective-C Firebase框架时遇到了问题。我来自大多数C#背景,所以Swift闭包语法还不清楚。

以下是使用f作为Firebase对象的代码在Objective-C中的工作原理

[f observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
  NSLog(@"%@ -> %@", snapshot.name, snapshot.value);
}];

XCode auto建议使用这种语法,我还没有找到可行的解决方案。

f.observeEventType(FEventTypeValue, withBlock: ((FDataSnapshot!) -> Void)?)

我想像在Objective-C示例中那样将FDataSnapshot数据分配给变量。感谢

3 个答案:

答案 0 :(得分:14)

这是Swift的等价物:

f.observeEventType(FEventTypeValue, withBlock: {
    snapshot in
    println("\(snapshot.name) -> \(snapshot.value)")
})

这里的关键是in关键字,用于将闭包的参数赋给变量

答案 1 :(得分:4)

要引入隐含的名称和尾部闭包,您可以使用:

f.observeEventType(FEventTypeValue) {
    println("\($0.name) -> \($0.value)")
}

答案 2 :(得分:1)

Swift块可以与Objective-C块互换,所以它应该是这样的:

f.observeEventType(FEventTypeValue, withBlock: { 
    snapshot in 
    println("\(snapshot.name) -> \(snapshot.value)")
})