Swift 3函数命名约定

时间:2017-09-06 10:36:59

标签: ios swift swift3 coding-style

我对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)

然后它会更像Swift 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

2 个答案:

答案 0 :(得分:4)

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

它说:

  

- 永远不要从匹配a的方法的基本名称修剪后缀   封闭类的财产:

     

这种启发式具有的效果   阻止我们为那些方法生成过于通用的名称   从概念上修改类的属性。

     

...如果我们放弃GestureRecognizer,只留下添加,我们结束了   使用概念上修改gestureRecognizers的方法   属性,但使用过于通用的名称:

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

为什么present重命名了?

请注意,present中定义了UIViewControllerUIViewController没有名为viewControllerviewControllers的属性,因此ViewController部分会被删除。

答案 1 :(得分:2)

不一致性:

  • 大多数UIKitFoundation框架都是Objective-C构建的,并且在Swift之前就已存在。
  • 所以他们有一个Swift界面来访问它们,他们试图匹配它的大部分地方,有时是不一致的。

目标:

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

目标是定义函数名称,使单独的函数名称(不带参数)描述函数将执行的操作。

从用法及其调用方式来看。明确的名称确实可以提高可读性并为良好的设计铺平道路(避免混淆函数属于类A或类B

的位置

实施例

struct Record {

    var name : String
    var age : Int

    func save() {}
}
  • 在这种情况下,由于name

  • 中的ageRecord属性,因此根本没有任何参数可能是有意义的
  • 因此类/ struct / enum也会添加上下文,因此可以避免不必要/冗余的单词。

  • 带副作用的功能用动词

  • 表示
  • 没有副作用的功能用名词
  • 表示
  • 请参阅以下链接,了解变异和非变异功能。

答案:

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

record.save()

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

参考:

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