Swift 3函数命名约定



我对函数命名约定在swift 3

中有点混淆

我遵循了Swift 3指南,发现命名约定的方法应该看起来像:

func move(from start: Point, to end: Point)
x.move(from: x, to: y)

但是...

如果我查看uinavigationController方法,我找到了pushViewControllerpresentViewController方法。方法调用看起来像这样:

navigationController?.pushViewController(viewController, animated: true)
navigationController?.present(controller, animated: true)

在这里,我想知道为什么pushViewController方法调用不是Swift3。以及为什么这两种方法之间存在不一致之处。由于指南,我认为push方法应该看起来像:

rootNavigationController?.push(viewController, animated: true)

那么,它会更快3。

让我们考虑一个简单的例子:

//1
func saveName(_ name : String) {}
saveName("John")
//2
func save(_ name: String){}
save("John")
//3
func save(name: String){}
save(name: "John")

我认为,我认为3号选项最适合Swift 3指南。 但另一方面,由于我使用pushViewControllerpresent(controller)方法的示例,选项编号1也很好。

所以我的问题是:

最适合Swift 3指南的最佳选择是?

更新

由于@Sweeper的答案,它解决了为什么pushpresent方法之间存在不一致的原因。

来源:

https://github.com/raywenderlich/swift-style-guide

https://swift.org/documentation/api-design-guidelines/#parameter-names

请在此处查看:https://github.com/apple/swift-evolution/blob/master/master/proposals/0005-Objective-c-name-translation.md

它说:

- 切勿在与A的基本名称的基本名称中修剪后缀封闭类的属性:

这个启发式词具有防止我们生成过多的名称,以获取从概念上修改类的属性。

...如果我们要放下exurerognizer,请添加,我们最终会通过从概念上修改eSturerCognizer的方法属性,但使用一个过于通用的名称来做到:

这就是为什么pushViewController未重命名的原因。在UINavigationController中,有一个称为viewControllers的属性。为了避免"过于通用的名称"。

为什么present重命名?

请注意,presentUIViewController中定义。UIViewController没有称为viewControllerviewControllers的属性,因此ViewController零件被修剪。

不一致:

  • UIKitFoundation的大部分框架已在Objective-C中构建,并且在Swift之前存在。
  • 因此,他们有一个快速的接口可以访问它们,他们试图匹配它的大多数地方

目标:

具有或没有外部参数名称的功能是完全可以的。这取决于场景(类,功能和上下文)

目标是以一种单独的函数名称(无参数)描述函数将做什么的方式定义函数名称。

从使用情况以及如何调用它。一个清晰的名称确实可以提高可读性和铺平方法的良好设计(避免在函数属于A或类B类中的何处混淆

示例:

struct Record {
    
    var name : String
    var age : Int
    
    func save() {}
}
  • 在这种情况下,完全没有任何参数是有意义的,因为nameageRecord

    中的属性
  • 因此,类/结构/枚举也添加了上下文,因此可以避免不必要/多余的单词。

  • 具有副作用的功能用动词表示

  • 没有副作用的功能用名词表示

  • 请参阅以下链接以进行突变和非突变功能。

答案:

因此,这取决于上下文并尝试查看API的用法,这将提供更多的见解。如何设计API。

record.save()

注意:以上只是一个示例,您的方案中可能是save功能可能是不同上下文的一部分。

参考:

https://swift.org/documentation/api-design-guidelines/