全然頭に入らないので覚え書き。
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 *);
リンク
-
Block構文の基本 / Objective-Cと戦うブログ