2012-07-08 79 views
2

我刚刚开始使用obj-c,并创建了2个文件,一个.h和一个.m文件。 .h文件是..为什么我不能将它设置为字符串?

#import <Foundation/Foundation.h> 

@interface CardUnit : NSObject 
{ 

@property (assign) NSString *name; 
@property (assign) NSString *gold; 
@end 

与.m文件

#import "CardUnit.h" 

@implementation CardUnit 

@synthesize gold = @"gold"; 
@synthesize name = _name; 

@end 

但它给我一个错误的

@synthesize gold = @"gold"; 

说 “预期;合成后”

为什么我不能将它设置为字符串?

+2

接口声明中的开头大括号('{')也是无与伦比的,但如果没有ivars,则不需要大括号。只是fyi。 – chown 2012-07-08 15:33:50

回答

2

@synthesize不用于给变量赋值,而是用于为变量定义基本getter和setter的简写。该

@synthesize var = _var 

语法常说,“我想你使用实例变量_var作为内部变量的属性var”。

如果您想将默认字符串赋值给一个属性,把它放在你的init方法:

-(id)initWithName:(NSString*)name 
{ 
    self = [super init]; 
    if(self) 
    { 
    self.gold = @"gold"; 
    self.name = name 
    } 
    return self; 
} 

或者你也可以在吸气设定的默认值(每@马里奥的评论波纹管):

-(NSString*)gold 
{ 
    _gold ? return _gold : return @"gold"; 
} 
+1

或者把默认值放在你的getter中。例如。如果(!黄金)返回@“黄金”; – Mario 2012-07-08 17:01:29

+0

@Mario;好主意。我会编辑。 – Linuxios 2012-07-08 18:42:41

0

您不能在@synthesize声明中分配一个值。

@synthesize是一个为变量设置getter和setter的声明。而不是分配值。

你应该稍后再做一个方法,将值设置为你的“黄金”变种。

+0

我是AS3开发者,所以我习惯于能够在方法外设置我的变量,你不能在obj-c中做到这一点吗? – Phil 2012-07-08 15:31:06

+0

@Phil:'黄金= @“黄金”;'工作,只是不使用合成。 – C0deH4cker 2012-07-08 15:32:15

+1

@Phil不,Objective-C ivars在创建时始终设置为0。除代码外,您不能将它们设置为默认值。你通常在你的类的'-init'方法中设置默认值。另外,如果你不使用ARC和'strong'或'copy',那么你应该真的让你的属性'保留'或'复制'。 'assign'会导致对象的内存问题。 – 2012-07-08 15:39:19

0

您不假设将值设置为合成中的变量。它们仅用于综合访问器方法。

0

@synthesize为属性生成一个getter和setter,但编译器负责生成这些属性。

我认为这是一个好主意,阅读iOS开发的好教程,也许从Apple Developer连接网站上的Start developing iOS apps today开始。

相关问题