Dans mon code Objective-C pour mon GPUImage cadre, j'ai la macro suivante:
#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define SHADER_STRING(text) @ STRINGIZE2(text)
ce qui me permet de inline multiligne vertex et fragment shaders comme NSString littéraux dans mon filtre personnalisé des sous-classes, comme ceci:
NSString *const kGPUImagePassthroughFragmentShaderString = SHADER_STRING
(
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
void main()
{
gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
}
);
GPUImage besoins afin de fournir formaté vertex et fragment shaders qui sont inclus dans le corps du texte de filtre de sous-classes. Expédition sous forme de fichiers séparés rendrait le cadre de l'impossibilité d'être compilées dans une bibliothèque statique. À l'aide de la macro ci-dessus, je peux faire ces shaders peuvent être copiés et collés entre le code de la structure et externes shader fichiers sans un montant ridicule de reformatage de travail.
Swift ne loin avec le compilateur de macros et de la documentation a ceci à dire:
Macros complexes sont utilisés dans C et Objective-C, mais n'ont pas d'équivalent en Swift. Macros complexes sont des macros qui ne sont pas définir des constantes, y compris les parenthèses, la fonction-comme les macros. Vous utilisez des macros complexes en C et Objective-C pour éviter le type de vérification des contraintes ou à éviter retaper de grandes quantités de code réutilisable. Cependant, les macros peuvent faire débogage et de refactoring difficile. En Swift, vous pouvez utiliser des fonctions et les génériques d'obtenir les mêmes résultats, sans aucun compromis. Par conséquent, les macros complexes qui sont dans C et Objective-C source les fichiers ne sont pas disponibles pour votre code Swift.
Par la ligne "Dans Swift, vous pouvez utiliser des fonctions et des génériques pour obtenir les mêmes résultats sans compromis", il est un moyen rapide pour fournir multiligne littéraux de chaîne sans avoir à recourir à une chaîne de concaténation des opérations?