Работа с блоками 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)")
})