2012-06-26 41 views
4

我有一個類中的私有變量,我試圖從外部類訪問該變量。 有沒有辦法可以做到這一點?從外部類訪問私有變量 - iOS

+1

請用代碼示例和說明說明您的問題。 –

+0

爲什麼要聲明它是私人的,如果你想訪問它外部?我認爲這違反了封裝的基本OOP概念 – janusbalatbat

+0

您可以使用getter,或者我相信objective-c具有可用於設置和獲取私有變量的屬性。 –

回答

18

根據定義,私有實例變量是私有的。你不能在外部訪問它們。如果您是該類的作者,則應該爲該變量提供訪問器方法。如果你不是,你應該避免訪問變量。

但是,有辦法規避這種限制。

您可以在第一個類上創建一個類別併爲該實例變量添加一個存取器方法。

或者您可以使用鍵值編碼來訪問變量。

[object valueForKey:@"variable_name"];
+0

訪問私有實例變量的好方法 –

0

您可以創建自己的get/set方法...或者您可以使用Objective-C標準,將該變量聲明爲.h文件中的一個屬性,然後將其合成到.m文件中。請記住,如果其他類可以看到變量和訪問它,那麼它不再是一個 「私人」 變量

testViewController.h

@interface testViewController : UIViewController 
{ 
    NSString *someString; 
} 

@property (nonatomic, retain) NSString *someString; 

@end 

testViewController.m

#import testViewController.h 

@interface testViewController 
@synthesize someString=_someString; 
@end 
1

私人定義意味着它不能被外部類訪問。訪問私有數據的唯一方法是通過接口中提供的訪問器方法。

在Objective-C中,您可以創建所謂的類別。這些是您基本可以用來擴展類的功能的一組方法。我對獲得在外部類中聲明的私有成員(沒有完全實現的私有成員)的訪問並不積極,但我能夠爲我自己的類訪問私有成員編寫一個類。

#import "OtherClass.h" 

@interface OtherClass(RandomAccessor) 

-(int) getMyVar; 

@end 

@implementation OtherClass(RandomAccessor) 

-(int) getMyVar 
{ 
    return self->myPrivateVar; 
} 

@end 

我真的不建議做這樣的事情,但是,因爲開發人員通常使私人有原因的數據。

+0

不會編譯,嘗試使用CBPeripheral的_isPaired –