【问题标题】:Swift programming style [duplicate]Swift 编程风格
【发布时间】: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 没有提到协议,所以对我来说这似乎是同一个问题。 – 这是另一个问题的答案,它表明协议一致性是一个主要用例,也是代码组织:“对我来说,这似乎完全合理,因为您可以使用扩展来公开不同的逻辑部分到不同的扩展。”

标签: ios swift


【解决方案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 有很好的文档,我强烈建议您阅读上面的链接。

    【讨论】:

    • 这里的问题是关于定义你自己的类型,而不是扩展一个你没有源代码的现有类型。
    猜你喜欢
    • 2011-06-02
    • 2016-03-27
    • 2011-12-12
    • 2010-09-27
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多