Swift-style-guide: 下一轮建议

创建于 2016-05-18  ·  6评论  ·  资料来源: raywenderlich/swift-style-guide

所有@IBAction项都应标记为私有,除非这些方法公开可用的真正原因。

通过#selector 从代码中定义的所有选择器都应标记为私有并以@objc标记为前缀,以便它们实际上可以标记为私有:)

理想情况下,这两个项目都应该包装在“私人扩展”块中。

最有用的评论

据我所知,您必须使用@objc标记才能将选择器函数标记为私有。

是的,我绝对将我的@IBOutlets标记为私有。 它们是一个实现细节,除非绝对必要,否则不应向外部调用者公开。

请记住样式指南不是教程指南。 如果那是意图,那就停止宣传它,让它只在作家内部。 你有很多来自网络各地的人使用它作为他们的风格指南。 它应该鼓励良好的行为,而不仅仅是为了方便教程。

当一个教程跳过一些事情只是为了让它变得简单时,我总是很困扰,因为我们有新的开发人员从你的教程中学习,所以你教他们做事不是最理想的。

所有6条评论

你会出于同样的原因将你的@IBOutlets标记为私有吗?

我对这个有点心烦意乱。 一方面, @IBActions可以被视为公共的,因为它们暴露于接口。 另一方面,没有充分的理由公开它们,在 Obj-C 中,我总是将它们粘贴在方法文件中。 另一个考虑因素是,从 IB 中拖出的出口和行动总是被宣布为内部/公共的。

我想我们应该问问自己,建立对@objc标签的依赖是否是个好主意。

以下是我的想法:

1) 我反对使用@objc标签。 Swift 正在积极地远离 Objective-C,RW 教程也是如此。

2) 关于将@IBAction和/或@IBOutlet标记为private作为教程中的一般规则,我认为我也不喜欢这样。

在我自己的项目中,是的,我确实尽可能地限制范围。 但是,我不认为这是 _大多数_ RW 教程的关键概念。

因此,我会问,“这会减损我在教程中尝试教授的关键概念吗?” 很有可能,特别是如果我必须解释为什么我将某些东西标记为private并不是很明显。

此外,我认为这只会为我们已经在做的_numerous_检查添加另一个技术编辑步骤,而且我再次质疑它在教程中真正提供了多少价值。

恕我直言,我认为我们应该遵循作者和技术编辑对@IBAction@IBOutlet的范围,而不是对其制定规则。

据我所知,您必须使用@objc标记才能将选择器函数标记为私有。

是的,我绝对将我的@IBOutlets标记为私有。 它们是一个实现细节,除非绝对必要,否则不应向外部调用者公开。

请记住样式指南不是教程指南。 如果那是意图,那就停止宣传它,让它只在作家内部。 你有很多来自网络各地的人使用它作为他们的风格指南。 它应该鼓励良好的行为,而不仅仅是为了方便教程。

当一个教程跳过一些事情只是为了让它变得简单时,我总是很困扰,因为我们有新的开发人员从你的教程中学习,所以你教他们做事不是最理想的。

感谢您的反馈和建议。

@objc方法不需要具有完整的动态调度才能被标记为私有。 访问控制和调度无关。 例如,以下工作:

    <strong i="8">@IBAction</strong> private func buttonTapped(sender: UIButton) {
    }

我猜你有别的想法,我想理解它。

PS:
关于指南的目的,我相信它在第一段中已经说得很清楚了。 就我个人而言,我在自己的项目中使用了它的分叉版本,修改了间距规则、版权标题和一些额外的 UIKit 和 IB 规则。 我认为它通常可以作为一个起点。

@grosch提到的问题是使用选择器。
let recognizer = UITapGestureRecognizer(target: self, action: #selector(buttonTapped(_:)))

为了使选择器是私有的,它需要是:
<strong i="10">@objc</strong> private func buttonTapped(sender: UITapGestureRecognizer)
或者
private dynamic func buttonTapped(sender: UITapGestureRecognizer)

啊,我现在明白了。 谢谢! 👋
来自 Obj-C 兼容类的标记private的方法不会动态调度(即不是选择器)。 在某种程度上,当前的指南实际上已经涵盖了这一点。 私人的东西通常应该被标记为私人的,以提高清晰度。 见https://github.com/raywenderlich/swift-style-guide#access -control
一旦标记private ,它就完全是该类的一个实现细节。 如果您需要在某个地方将其称为选择器,那么您实际上别无选择,只能将其设为一个。 我认为对第二部分最好是懒惰,因为使用 Swift 3 ...(哎呀,我的意思是 Swift 4)ABI 弹性,更改私有方法不会是重大更改。 此外,通过使用@objc标记私有方法,您正在积极阻止优化器内联等,因此这样做有一个很大的缺点。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

luki picture luki  ·  3评论

xezun picture xezun  ·  6评论

rayfix picture rayfix  ·  3评论

aramezk picture aramezk  ·  9评论

jackwu95 picture jackwu95  ·  6评论