これはコードにありますが、オブジェクトがセレクターに応答するだけでなく、値のタイプがプロパティのタイプに対応していることを確認したいと思います。
if ([object respondsToSelector:NSSelectorFromString(propName)])
[object setValue:value forKey:propName];
たとえば、値がブール値で、プロパティが文字列の場合、ifを短絡させたいと思います。
これはコードにありますが、オブジェクトがセレクターに応答するだけでなく、値のタイプがプロパティのタイプに対応していることを確認したいと思います。
if ([object respondsToSelector:NSSelectorFromString(propName)])
[object setValue:value forKey:propName];
たとえば、値がブール値で、プロパティが文字列の場合、ifを短絡させたいと思います。
これは、セッターをオーバーライドすることによっても達成できます。このようにして、プロパティを設定するすべての場所をチェックインする必要はありません。
- (void) setSomeString:(NSString *)someString {
if (![someString isKindOfClass:[NSString class]]) return;
_someString = someString;
}
このカテゴリNSObject+Propertiesを使用します。このカテゴリは NSObject を拡張し、とりわけ、オブジェクトにプロパティがあるかどうかを確認する可能性を追加します。
- (BOOL) hasPropertyNamed: (NSString *) name;
- (BOOL) hasPropertyNamed: (NSString *) name ofType: (const char *) type;
- (BOOL) hasPropertyForKVCKey: (NSString *) key;