Liste de Bloc de Déclaration de Syntaxes
Dans l'ensemble, laissez
-
return_type
être le type de l'objet/primitif/etc. vous souhaitez retourner (communément void
)
-
blockName
être le nom de la variable du bloc que vous êtes en train de créer
-
var_type
être le type de l'objet/primitif/etc. vous souhaitez passer comme argument (laisser vide si pas de paramètres)
-
varName
être le nom de la variable du paramètre donné
Et n'oubliez pas que vous pouvez créer autant de paramètres que vous souhaitez.
Les blocs comme des Variables
Peut-être le plus commun pour de déclaration.
return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
// ...
};
Les blocs comme des Propriétés
Beaucoup, comme la déclaration de blocs de variables, mais subtilement différentes.
@property (copy) return_type (^blockName) (var_type);
Les blocs comme des Paramètres
Notez que ceci est différent de "Blocs comme Arguments"; dans ce cas, vous êtes de la déclaration d'une méthode qui se veut un bloc argument.
- (void)yourMethod:(return_type (^)(var_type))blockName;
Les blocs comme des Arguments
Notez que ceci est différent de "Blocs de Paramètres"; dans ce cas, vous êtes à l'appel d'une méthode qui se veut un bloc argument avec un bloc anonyme. Si vous avez déjà déclaré une variable d'un bloc, il suffit de passer le nom de la variable comme argument.
[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
//...
}];
Bloc Anonyme
C'est fonctionnellement un bloc anonyme, cependant la syntaxe pour l'attribution de blocs de variables est simplement de définir la variable est égale à un bloc anonyme.
^return_type (var_type varName)
{
//...
};
typedef
Bloc
Cela vous permet de définir un nom court qui peut être référencé comme tout autre nom de la classe lors de la déclaration de blocs.
typedef return_type (^blockName)(var_type);
Pour ensuite les utiliser plus tard blockName
, au lieu de la norme bloc de syntaxe de déclaration, il vous suffit de remplacer.
Inline Block
C'est sans doute moins utile l'utilisation de blocs, mais peut avoir sa place tout de même. Un inline-block est un bloc anonyme appelée immédiatement après l'instanciation.
^return_type (var_type varName)
{
//...
}(var);
Inline blocs sont principalement utile pour la portée de compensation, et sont à peu près équivalent à de simples délimité par des accolades morceaux de code.
{
//...
}
Récursive Blocs
Cela vous permet d'appeler un bloc de lui-même, créer une boucle qui peut être utilisé lors des rappels et PGCD des appels. Cette méthode d'instanciation est libre de conserver les cycles de l'ARC.
__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
if (returnCondition)
{
blockName = nil;
return;
}
// ...
} copy];
blockName(varValue);
De Retour Blocs
Une méthode peut retourner d'un bloc,
- (return_type(^)(var_type))methodName
{
// ...
}
comme une fonction, si c'est un peu étrange.
return_type (^FunctionName())(var_type)
{
// ...
}
Addenda
Si j'ai oublié quelque chose, s'il vous plaît laissez-moi savoir dans les commentaires, et je vais de recherche/ajouter.
Oh, et en Swift...
blockName = (varName: var_type) -> (return_type)
C'est presque comme si c'est une fonctionnalité du langage.