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 编程风格的主要内容,如果未能解决你的问题,请参考以下文章

raywenderlich.com的Swift编程风格指南

Swift编程规范:保持代码优美的10个方法

声明式 UI 编程探索-构建 SwiftUI 风格的 UI 框架 | GMTC

用Swift的函数式编程解决硬币问题

《自拍教程》Python编程风格规范

javascript:编程风格