我刚开始学习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](对于我的实例城市) (对不起我的英文)
答案 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;
}