2012-07-08 82 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開始。

相關問題