IBOutlet在您的iOS应用程序中是私有的吗?

图片

您可能使用情节提要或XIB来布局界面? 代码的布局很好,但有时通过查看和不阅读它,更容易理解界面的一个组件的工作方式。 在本文中,我想讨论对IBOutlet使用private修饰符的需求。

对于IBOutlet封装很明显的开发人员,不太可能感到惊讶,但是本文结尾处的调查可能很有趣。

想象一下,您将为您的任何UILabel创建IBOutlet(从情节提要板到视图的链接)。 用鼠标拖动时,Xcode会仔细创建类似

@IBOutlet weak var myLabel: UILabel! 

很长时间以来,我一直认为这种设计是最佳的,直到我的同事问为什么您的IBOutlet不是私有的?

实际上,为什么我应该让所有IBOutlet都可以从外部访问?
想象一个经典的问题-我们有一个单元格,例如,显示某人的联系人

 import UIKit class ContactCell: UITableViewCell { @IBOutlet private weak var nameLabel: UILabel! @IBOutlet private weak var positionLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() } func setupCell(withContact contact: Contact) { nameLabel.text = contact.name positionLabel.text = contact.position } } 

通过将private添加到熟悉的IBOutlet中,我们可以保证不会从另一个类中设置单元格的指定字段。 这在团队合作中尤其有用,当有人通过粗心/缺乏时间/愚蠢(必要时加下划线)试图直接在tableView方法中设置单元格标签的颜色,文本或其他属性时(_:cellForRowAt :) 。

想象一个单元或整个ViewController包含许多IBOutlet,它们具有大量的显示设置。 通过添加私有来保护自己是否比查找为什么元素的外观突然改变或Gesture Recognizer从设置了意外行为的地方出现的原因更容易呢?

PS:如果阅读后要对IBOutlets使用private,那么为简单起见,您可以在Xcode中获取有关此内容的摘要。

以下是一项调查,如果您想对答案选项发表评论,欢迎发表评论。

Source: https://habr.com/ru/post/zh-CN424843/


All Articles