Edited at

Blocks

More than 3 years have passed since last update.

全然頭に入らないので覚え書き。


NSStringをNSNumberに変換すると見せかけて実は何もしていないメソッド

- (NSNumber *)string2number:(NSString *)string func:(NSNumber * (^)(NSString *str))func

{
NSLog(@" [enter]");
NSLog(@" string=[%@]", string);
NSLog(@" func=%@", func);
NSNumber *number = func(string);
NSLog(@" number=%@", number);
NSLog(@" [exit]");
return number;
}


NSStringをintなNSNumberに変換してもらうと見せかけて自分で変換する

NSLog(@"[int]");

NSNumber *number;
number = [self string2number:@"123.45"
func:^NSNumber *(NSString *string) {
NSLog(@"string=[%@]", string);
return @(string.intValue);
}];
NSLog(@"number=%@(%s)", number, [number objCType]);


log

[int]

[enter]
string=[123.45]
func=<__NSGlobalBlock__: 0xb7144>
string=[123.45]
number=123
[exit]
number=123(i)


NSStringをfloatなNSNumberに変換してもらうと見せかけて自分で変換する

floatにしただけです。

NSLog(@"[float]");

NSNumber *number;
number = [self string2number:@"987.65"
func:^NSNumber *(NSString *string) {
NSLog(@"str=[%@]", string);
return @(string.floatValue);
}];
NSLog(@"number=%@(%s)", number, [number objCType]);


log

[float]

[enter]
string=[987.65]
func=<__NSGlobalBlock__: 0xb7168>
str=[987.65]
number=987.65
[exit]
number=987.65(f)


NSStringをdoubleなNSNumberに変換してもらうと見せかけて自分で変換する

一旦変数に代入(という表現でいいのか?)してから使う。

NSLog(@"[double]");

NSNumber * (^str2dbl)(NSString *) = ^NSNumber * (NSString *string)
{
NSLog(@"string=[%@]", string);
return @(string.doubleValue);
};

NSNumber *number;
number = [self string2number:@"999.99" func:str2dbl];
NSLog(@"number=%@(%s)", number, [number objCType]);


log

[double]

[enter]
string=[999.99]
func=<__NSGlobalBlock__: 0xe2194>
string=[999.99]
number=999.99
[exit]
number=999.99(d)


typedef

typedef NSNumber * (^func) (NSString *);


リンク