2014-06-11 1 views
11

J'ai des difficultés à utiliser le framework Objective-C Firebase dans un nouveau projet Swift. Je viens d'un arrière-plan en C#, donc la syntaxe de fermeture de Swift n'est pas encore très claire.Utilisation de blocs Objective-C avec Swift

Voilà comment le travail de code en Objective-C avec f étant l'auto objet Firebase

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

XCode suggère cette syntaxe, et je dois encore trouver une solution de travail. Je souhaite affecter les données FDataSnapshot à une variable comme le fait l'exemple Objective-C. Merci

+2

Les fermetures dans Swift sont comme des méthodes anonymes en C#. Par exemple, 'Action ' se traduit par '(T) -> Void' et' Func 'devient' (TArg) -> TResult'. – Erik

+0

Merci SiLo qui est utile – Beanwah

Répondre

14

est ici l'équivalent Swift:

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

La clé ici est le mot-clé in pour assigner des arguments à la fermeture des variables

+0

Je me demandais si vous pouvez jeter un oeil à ceci: https://gist.github.com/acegreen/05282d20eb45de8d30d5 –

1

blocs Swift sont interchangeables avec des blocs Objective-C, il devrait quelque chose comme:

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

à jeter dans les noms implicites et les fermetures de la queue, vous pouvez utiliser:

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

N'a pas besoin du nom du dernier paramètre, cependant? – Chuck

+1

Non, il utilise le nommage et la frappe implicites tant qu'il y a un seul bloc de fin et vous mettez le '{' sur la même ligne que le ')' –

+0

Comment connait-il le nom du paramètre 'withBlock:'? Je pensais que les paramètres nommés devaient encore être nommés. Est-ce documenté n'importe où? – Chuck

Questions connexes