Text Templates in Objective-C Our first program will demonstrate how to use text templates in Objective-C. Here’s the full source code:
#import <Foundation/Foundation.h>
int main ( int argc , const char * argv []) {
@autoreleasepool {
// We can create a new template and parse its body from a string.
// Templates are a mix of static text and "actions" enclosed in
// {{...}} that are used to dynamically insert content.
NSString * template1 = @"Value is {{value}} \n " ;
// In Objective-C, we don't have a built-in template engine like Go's text/template.
// We'll use a simple string replacement method to simulate template behavior.
NSString * result1 = [ template1 stringByReplacingOccurrencesOfString : @"{{value}}" withString : @"some text" ];
NSLog ( @"%@" , result1 );
result1 = [ template1 stringByReplacingOccurrencesOfString : @"{{value}}" withString : @"5" ];
NSLog ( @"%@" , result1 );
NSArray * languages = @[ @"Objective-C" , @"Swift" , @"C++" , @"C#" ] ;
result1 = [ template1 stringByReplacingOccurrencesOfString : @"{{value}}" withString :[ languages description ]];
NSLog ( @"%@" , result1 );
// If the data is a dictionary we can use the key to access its values.
NSString * template2 = @"Name: {{name}} \n " ;
NSDictionary * person = @{ @"name" : @"Jane Doe" } ;
NSString * result2 = [ template2 stringByReplacingOccurrencesOfString : @"{{name}}" withString : person [ @"name" ]];
NSLog ( @"%@" , result2 );
// Conditional execution can be simulated using if statements
NSString * template3 = @"{{if_not_empty}} yes {{else}} no {{endif}} \n " ;
NSString * value = @"not empty" ;
NSString * result3 = [ template3 stringByReplacingOccurrencesOfString : @"{{if_not_empty}}" withString :( value . length > 0 ? @"" : @"{{else}}" )];
result3 = [ result3 stringByReplacingOccurrencesOfString : @"{{else}} no {{endif}}" withString : @"" ];
NSLog ( @"%@" , result3 );
value = @"" ;
result3 = [ template3 stringByReplacingOccurrencesOfString : @"{{if_not_empty}}" withString :( value . length > 0 ? @"" : @"{{else}}" )];
result3 = [ result3 stringByReplacingOccurrencesOfString : @"{{else}}" withString : @"" ];
result3 = [ result3 stringByReplacingOccurrencesOfString : @"{{endif}}" withString : @"" ];
NSLog ( @"%@" , result3 );
// Range blocks can be simulated using a loop
NSString * template4 = @"Range: {{range}} \n " ;
NSMutableString * rangeResult = [ NSMutableString string ];
for ( NSString * lang in languages ) {
[ rangeResult appendFormat : @"%@ " , lang ];
}
NSString * result4 = [ template4 stringByReplacingOccurrencesOfString : @"{{range}}" withString : rangeResult ];
NSLog ( @"%@" , result4 );
}
return 0 ;
}
To run the program, save the code in a file named TextTemplates.m
and compile it using:
$ clang -framework Foundation TextTemplates.m -o TextTemplates
$ ./TextTemplates
Value is some text
Value is 5
Value is (
"Objective-C" ,
Swift,
"C++" ,
"C#"
)
Name: Jane Doe
yes
no
Range: Objective-C Swift C++ C#
This example demonstrates how to simulate text templates in Objective-C. Since Objective-C doesn’t have a built-in template engine like Go’s text/template
, we use string replacements to achieve similar functionality. The concepts of variable substitution, conditional execution, and range iteration are simulated using Objective-C’s string manipulation methods and control structures.
Note that this is a basic implementation and doesn’t provide all the features of a full-fledged template engine. For more complex template needs in Objective-C projects, you might want to consider using third-party libraries or implementing a more sophisticated template system.