如何在Objective C中使用变量的值?

时间:2013-05-26 12:04:54

标签: objective-c variables

我刚开始学习ObjectiveC,我遇到了问题。

我在for循环中有一个变量,这个变量在任何迭代都会改变值,我希望得到他的值。

这里我的问题变量是“name”:

第一次迭代

名称='id' 第二次迭代名称='city'...

for (i = 0; i < count; i++) {
name = ivar_getName(ivars[i]);
encode = ivar_getTypeEncoding(ivars[i]);
type = decode_type_string(encode);
if (strncmp(encode, "@", 1) == 0)
{
printf(" '%s', ", [[obj name*]UTF8String]);
}
else
{
printf(" %s ", name);
}
}

我的目标是变量由其值解释。如果我的iiteration变量名称设置为“ID”我想要:[obj name] =&gt; [id obj](对于我的实例的id)如果我的iiteration变量名称设置为“City”我想要:[obj name] =&gt; [obj City](对于我的实例城市) (对不起我的英文)

4 个答案:

答案 0 :(得分:2)

我认为你对几件事感到非常困惑。首先,NSString对象不以“@”作为字符串的第一个字符开头。相反,“@”字符用于区分C字符串文字(例如,“abc”)和Objective-C NSString文字(例如,@“abc”)。请注意,“@”字符在引号之外。

其次,如果您有一个名为“name”的PROPERTY对象,您可以使用[myObj name]myObj.name引用其值,并使用[myObj setName:newValue];或{{{ 1}}。

如果您希望打印NSString对象以进行诊断,可以使用myObj.name = newValue;进行打印。 NSLog(@"Here is the string ->%@", theString);是一种特殊的Objective-C格式代码,意思是“将下一格式parm视为对象并调用它的%@方法,然后显示该结果”。

(如果你“只是在学习”Objective-C,就没有理由与description及其类似的东西混淆。很少需要这样的功能。)

答案 1 :(得分:0)

如果要打印Objective-C字符串,请使用NSLog

NSLog(@" %@ ", [obj name]);

答案 2 :(得分:0)

要在objective-c中打印字符串,您可以使用NSLog。电话看起来像

NSLog(@"%@",[obj name]);

答案 3 :(得分:0)

我不确定我是否正确地阅读了您的问题 - 但我认为您想要动态获取它们。

请参阅下面的示例。

DW传递。

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

@interface Frob : NSObject;
@property (strong) NSString * name, * bar, * fred;
@end
@implementation Frob
@end

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Frob * frob = [[Frob alloc] init];
        frob.name = @"aName value";
        frob.bar = @"aBar value";
        frob.fred = @"aFred value";

        const char *lst[] = { "name", "bar", "fred" };
        for(int i = 0; i < sizeof(lst)/sizeof(char*); i++)
        {
            const char * nameStr = lst[i];

            SEL s = sel_getUid(nameStr);
            if (s) {
                NSString * val = [frob performSelector:s];
                NSLog(@"%s --> %@\n", nameStr, val);
                printf("%s --> %s", nameStr, [val UTF8String]);
            }
        }
    }
    return 0;
}