Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 公共与私人IBO网点_Ios_Oop_Private_Encapsulation_Iboutlet - Fatal编程技术网

Ios 公共与私人IBO网点

Ios 公共与私人IBO网点,ios,oop,private,encapsulation,iboutlet,Ios,Oop,Private,Encapsulation,Iboutlet,我想知道当我需要在以下两种可能性之间从另一个查看控制器读取UILabel/UITextField的内容时,什么被认为是更好的做法: 1) 只需在.h文件中的UITextField中创建一个IBOutlet,并向所有人公开 2) 在.h文件中创建一个NSStringreadonly属性,在实现文件中设置为readwrite,并在每次private

我想知道当我需要在以下两种可能性之间从另一个查看控制器读取
UILabel
/
UITextField
的内容时,什么被认为是更好的做法:

1) 只需在.h文件中的
UITextField
中创建一个
IBOutlet
,并向所有人公开
2) 在.h文件中创建一个
NSString
readonly属性,在实现文件中设置为readwrite,并在每次private更改时对其进行更新

在我看来,第二个选项看起来是更好的方法,因为它维护了OOP封装,但对于每个视图控制器中的每个
UITextField/UILabel
,似乎都需要做很多工作

想法? 谢谢


编辑:此外,如果我需要能够从外部设置
IBOutlets
,但使用
-(void)prepareforsgue:
方法。所以我想第二个选项是唯一的选项?

只需在视图控制器中创建getter方法,以返回所需的数据。例如,
UITextField

- (NSString *)getTextFieldText {
   return self.myTextField.text;
}
无需以这种方式添加冗余属性(NSString*)。
与封装一样,您隐藏了私有数据(即您的IBOutlet)并仅公开了其他人所需的数据

,因此我必须在头文件中为我在实现文件中声明的每个IBOutlet创建一个getter方法,就像您希望访问的任何其他数据一样。你只是不暴露整个outlets,如果我还需要从外部设置它呢?那么,我必须为每个IBOutlet创建一个setter方法吗?如果您需要获取和设置,那么您的第一种方法可能是最简单的方法,但任何其他方法都需要为要公开和更改的每个数据创建一个getter/setteroutside@AnatolyAnatoly对的如果您使用的是故事板,UIKit对象的插座将不会起任何作用(因为
prepareforsgue:
awakeFromNib
之前被调用,这是插座第一次对您可用。)