2015-06-04 57 views
0

我想知道是否可以在私有@property上使用@synthesize,以便get/set方法具有公共訪問權限。Objective-C public獲取私有屬性的集合方法

現在我的代碼看起來是這樣的

SomeClass.h

#import <Foundation/Foundation.h> 
@interface SomeClass : NSObject 
{ 
    @private 
    int somePrivateVariable; 
} 
@end 

SomeClass.m

#import "SomeClass.h" 
@interface SomeClass() 
@property int somePrivateVariable; 
@end 

@implementation 
@synthesize somePrivateVariable; 
@end 

然後在外面的一些功能我希望能夠寫:

#import "SomeClass.h" 
SomeClass *someClass = [[SomeClass alloc] init]; 
[someClass setSomePrivateVariable:1337]; // set the var 
NSLog("value: %i", [someClass getSomePrivateVariable]); // get the var 

我知道我可以在頭文件中創建自己的get/set方法,但是我會非常喜歡使用@synthesize。

+1

公共接口不是財產。這是一個老式的伊娃,被標記爲私人。 –

+4

爲什麼要讓它成爲公開的私密? –

+0

我很好奇,如果有可能的話,但我想沒有多少指向它.. –

回答

1

如果你想要一個公共財產鏡像一個私人財產,只需重寫公共財產的getter和setter並返回私人財產。

@interface Test : NSObject 

@property NSObject *publicObject; 

@end 

然後,在執行:

@interface Test() 

@property NSObject *privateObject; 

@end 

@implementation Test 

- (NSObject *)publicObject 
{ 
    return self.privateObject; 
} 

- (void)setPublicObject:(NSObject *)publicObject 
{ 
    self.privateObject = publicObject; 
} 

@end