Swift编程风格

6
我在GitHub上看到了一些源代码,比如这个链接:functional-swift
我们可以看到这里定义了一个名为“Ship”的结构体,并且在其中有一些变量。从下面的代码中可以看到,还有一些函数。它们是以以下方式编写的:
struct xxx {
}

extension xxx {
    func yyy() {}
}

我也可以按照以下方式定义结构体:

struct 结构体名称 {

struct xxx {
    func yyy() {}
}

那么这两种风格有什么不同?是否有一个Swift编程风格指南?

1
请查看这个问题。我认为它涵盖了你的问题。 - 0x416e746f6e
2
将代码组织成相关方法的分组有助于提高代码的可读性,特别是在采用协议时(如所引用的问答中所解释的)。推荐参考链接:https://github.com/raywenderlich/swift-style-guide#protocol-conformance。 - Martin R
如何将方法分组到扩展中,确切地说是个人口味的问题。我不会像你链接的示例代码那样为每个方法定义一个扩展。 - Martin R
我不确定这是否是那个问题的重复,因为那个问题是关于具有明显好处的协议扩展的,而这个问题不是。 - GoatInTheMachine
据我理解,这两个问题都是关于何时使用扩展(而不是直接在结构体/类定义中定义所有方法)。另一个问题没有提到协议,所以对我来说似乎是同一个问题。- 另一个问题的答案表明协议一致性是主要用例,但也包括代码组织:“对我来说,这似乎完全合理,因为您可以使用扩展将逻辑的不同部分公开给不同的扩展。” - Martin R
2个回答

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
-> 当您无法访问类但想要添加一些功能时,扩展非常有用。使用扩展,您可以将类分隔开,并根据需要自定义类的功能。

0

从Swift文档中

扩展可以为现有的类、结构体、枚举或协议类型添加新功能。这包括扩展那些您无法访问原始源代码的类型(称为反向建模)的能力。

因此,当您想要扩展已经存在的实现时,它非常有用。苹果公司有很棒的文档,我强烈建议您阅读上面的链接。


这里的问题是关于定义自己的类型,而不是扩展一个你没有源代码的现有类型。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接