Swift 编程风格
Posted
技术标签:
【中文标题】Swift 编程风格【英文标题】:Swift programming style [duplicate] 【发布时间】:2016-01-05 08:38:00 【问题描述】:我在github上看到了一些源代码,像这样: functional-swift
我们可以看到有一个名为 Ship 的结构的定义,其中有一些变量。从下面的代码我们可以看出其中也有一些功能。它的写法如下:
struct xxx
extension xxx
func yyy()
我也可以用以下样式定义结构:
struct xxx
func yyy()
那么这两种风格有什么不同呢?有快速编程风格指南吗?
【问题讨论】:
请查看此question。我认为它涵盖了您的问题。 它有助于将您的代码组织成相关方法组,特别是在采用协议时(如引用的问答中所述)。推荐这里:github.com/raywenderlich/swift-style-guide#protocol-conformance. 如何准确地将方法分组到扩展中是个人喜好问题。我不会像您链接到的示例代码那样为 each 方法定义扩展。 我不确定这是不是那个问题的重复,因为那个问题是关于带有协议的扩展,它有明显的好处,而这不是。 @GoatInTheMachine:据我了解,这两个问题都是关于何时使用扩展(而不是直接在结构/类定义中定义所有方法)。另一个 question 没有提到协议,所以对我来说这似乎是同一个问题。 – 这是另一个问题的答案,它表明协议一致性是一个主要用例,也是代码组织:“对我来说,这似乎完全合理,因为您可以使用扩展来公开不同的逻辑部分到不同的扩展。” 【参考方案1】:从您的示例中,第一个是带有扩展名的基本结构
struct xxx
extension xxx
function yyy()
另一个是内置函数的结构体。
struct xxx
function yyy()
想象一下,由于某种原因您无法修改原始结构,但您仍然希望能够执行函数 yyy() -> 您可以扩展类以调用函数 yyy() 而无需修改类本身(或更改方式它在你程序的其他地方表现)
“扩展可以为类型添加新功能,但不能覆盖现有功能。” (来源:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html)
-> 当您无权访问某个类但您想添加一些功能时,扩展非常有用。使用扩展,您可以划分类并根据需要自定义类可以执行的操作。
【讨论】:
【参考方案2】:From the Swift docs:
扩展为现有的类、结构、枚举或协议类型添加新功能。这包括扩展您无法访问其原始源代码的类型的能力(称为追溯建模)。
所以它的用处在于你想扩展一个已经存在的实现。 Apple 有很好的文档,我强烈建议您阅读上面的链接。
【讨论】:
这里的问题是关于定义你自己的类型,而不是扩展一个你没有源代码的现有类型。以上是关于Swift 编程风格的主要内容,如果未能解决你的问题,请参考以下文章