公开 vs 私有 IBOutlets

4
我想了解在以下两种情况下,当我需要从另一个视图控制器中读取UILabel / UITextField的内容时,哪种做法被认为是更好的做法:
1)在.h文件中创建一个IBOutlet到UITextField,并将其公开给所有人 2)在.h文件中创建一个NSString只读属性,在实现文件中将其设置为可读写,并在每次私有UITextField更改时更新它。
在我看来,第二个选项似乎是更好的方法,因为它维护了面向对象的封装,但对于我在每个视图控制器中拥有的每个UITextField/ UILabel来说,这似乎是一项繁琐的工作。
您的想法是什么? 谢谢!
编辑:此外,如果我需要能够从外部设置IBOutlets,但是在prepareForSegue:方法中。所以我想第二个选项是唯一的选择?
1个回答

2

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

- (NSString *)getTextFieldText {
   return self.myTextField.text;
}

不需要这样添加冗余属性(NSString *)。就像封装一样,您隐藏了私有数据(即IBOutlets),仅公开其他人所需的数据。

1
与您想要访问的任何其他数据一样。您只需不公开整个插座即可。 - giorashc
如果我还需要从外部设置它,那怎么办?我是不是需要为每个IBOutlet创建一个setter方法? - user-123
1
如果你需要获取和设置数据,那么最简单的方法可能是使用第一种方法,但如果你想以其他方式实现,你需要为每个要公开和更改的数据编写getter/setter。 - giorashc
好的,谢谢!顺便说一下,我在某个地方读到过,在方法名前添加“get”不是一个好习惯。也许只需将其命名为-textFieldText? - user-123
1
@AnatolyAnatoly 正确。如果您正在使用故事板,那么对于UIKit对象的输出将不起作用(因为prepareForSegue:awakeFromNib之前被调用,而这是您第一次可以使用输出的时间)。 - Aaron Brager
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接