Работа с блоками Objective-C с Swift

У меня возникли проблемы с использованием инфраструктуры Objective-C Firebase в новом проекте Swift. Я исхожу из основного фона С#, поэтому синтаксис Swift закрытия еще не совсем ясен.

Вот как работает код в Objective-C с f, являющимся объектом Firebase

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

XCode автоматически предлагает этот синтаксис, и я еще не нашел рабочего решения.

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

Я хотел бы присвоить данные FDataSnapshot переменной, как это делает пример Objective-C. Благодаря

Ответ 1

Здесь эквивалент Swift:

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

Ключевым здесь является ключевое слово in для назначения аргументов замыкания переменным

Ответ 2

Чтобы ввести подразумеваемые имена и закрытие хвостов, вы можете использовать:

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

Ответ 3

Блоки Swift взаимозаменяемы с блоками Objective-C, поэтому это должно быть что-то вроде:

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