2011-08-01 50 views
1

我在我的代碼中有一個匿名結構,我想通過assign @property(無指針)訪問。但是,因爲這是一個匿名結構。下面是我創建的(即使它是可可的代碼,它是相關於一般的Objective-C)。是否有可能爲Objective-C中的匿名結構創建@property?

@interface ProfileViewController : UIViewController { 

    struct { 
     BOOL isDeviceOwner:1; 

    } _statusFlags; 
} 

現在,我想創建_statusFlags屬性可可代碼:

@property (nonatomic, assign) 

回答

2

是,您只需將它定義在內聯的位置,您可以定義類型。

@property (nonatomic, assign) struct { ... } statusFlags;

然後當你合成它,你可以做@synthesize statusFlags = _statusFlags如果你真的喜歡下劃線的實例變量,但是這會爲您生成伊娃。你不需要明確地定義它。

+0

哦,我明白了..這比我預期的更麻煩,但它是合乎邏輯的。至於強調的ivars。爲什麼我不喜歡他們? –

+0

這進入了一些哲學語言的樂趣:)有很多關於它在其他線程的討論,但我的論點是沒有任何理由訪問原始ivar,所有訪問應該通過屬性訪問器。 –

+0

我還得到以下錯誤與您的建議: ProfileViewController.m:61:錯誤:屬性類型'statusFlags'不匹配類型的伊娃'_statusFlags'這就是我所做的: @property(nonatomic,assign )struct {BOOL isDeviceOwner:1;} statusFlags; –

0

您也可以通過使屬性或方法採用指向被觸發的指針,然後只需讓編譯器知道該結構存在但不包含結構中的內容即大小,例如

struct myPrivateStruct; 
... 
@property(assign,nonatomic) struct myPrivateStruct * myStructProperty; 

的結構myPrivateStruct則已經在你的實現文件和屬性來定義,然後手動執行的財產,例如

struct myPrivateStruct { int a, b; float c; }; 

- (void)setMyStructProperty:(struct myPrivateStruct *)aValue 
{ 
    memcpy(&myIVar,aValue,sizeof(struct myPrivateStruct)); 
} 

這是會發生變化的接口文件@class與我們相似,Objective-C類的。

相關問題