困ったこと
こんなコードがあるときにtry-catch
を入れたくなりますよね。
NSString *const name = [self getNameMethodMayCauseException]; // 例外が発生するかもしれないメソッドや処理
[self otherMethodWithName:name];
するとこんな感じにname
が意味もなくmutableになってしまいます。
NSString *name = nil; // immutableでありたい:(
@try {
name = [self getNameMethodMayCauseException]; // 例外が発生するかもしれないメソッドや処理
} @catch (NSException *exception) {
name = nil;
}
[self otherMethodWithName:name];
解決法
どうにかimmutableにしたいと考えた結果、blocksを利用することでそれっぽくなりました。
// immutable :)
NSString *const name = ^NSString*(){
@try {
return [self getNameMethodMayCauseException]; // 例外が発生するかもしれないメソッドや処理
} @catch (NSException *exception) {
return nil;
}
}();
[self otherMethodWithName:name];