3

I have some properties set up on an object, mostly GLfloat and I was wondering if there was a way to use [self setValue:(id)value forKey:(id)key]; that would take a c style variable?

It doesn't have to be setValue:forKey if there is an alternative if there is one available.

My reasoning is I have a lot of properties on an object that are floats and I can pass an NSDictionary with values (NSNumber here is no issue) to set each relevant value.

Ideally I could do this without enumerators or custom setters - is this doable?

4

2 に答える 2

4

新しいObjective-C構文を使用して、任意の値をNSNumberに自動的にボックス化できます。

GLfloat alpha;
alpha = 2.3f;

[self setValue:@(alpha) forKey:@"theKey"];

これにより、最小限の手間でフロートがNSNumberに自動的に変換されます。

于 2013-02-21T12:32:29.830 に答える
4

同様にsetValue:forKey:、指定されたキーの適切なアクセサーまたはインスタンス変数に必要なデータ型を決定します。データ型がオブジェクトでない場合、適切な -Value メソッドを使用して、渡されたオブジェクトから値が抽出されます。

を渡すことができNSNumber、セッターの float に自動的に変換されます。

@interface MyClass ()

@property (nonatomic, assign) CGFloat example;

@end

@implementation MyClass

- (void)testSetter {
    [self setValue:@(5.0f) forKey:@"example"];
}

@end
于 2013-02-21T12:55:35.723 に答える