我对函数命名约定在swift 3
中有点混淆我遵循了Swift 3指南,发现命名约定的方法应该看起来像:
func move(from start: Point, to end: Point)
x.move(from: x, to: y)
但是...
如果我查看uinavigationController方法,我找到了pushViewController
和presentViewController
方法。方法调用看起来像这样:
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指南。 但另一方面,由于我使用pushViewController
和present(controller)
方法的示例,选项编号1也很好。
所以我的问题是:
最适合Swift 3指南的最佳选择是?
更新
由于@Sweeper的答案,它解决了为什么push
和present
方法之间存在不一致的原因。
来源:
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
重命名?
请注意,present
在UIViewController
中定义。UIViewController
没有称为viewController
或viewControllers
的属性,因此ViewController
零件被修剪。
不一致:
-
UIKit
和Foundation
的大部分框架已在Objective-C
中构建,并且在Swift
之前存在。 - 因此,他们有一个快速的接口可以访问它们,他们试图匹配它的大多数地方
目标:
具有或没有外部参数名称的功能是完全可以的。这取决于场景(类,功能和上下文)
目标是以一种单独的函数名称(无参数)描述函数将做什么的方式定义函数名称。
从使用情况以及如何调用它。一个清晰的名称确实可以提高可读性和铺平方法的良好设计(避免在函数属于A
或类B
类中的何处混淆
示例:
struct Record {
var name : String
var age : Int
func save() {}
}
在这种情况下,完全没有任何参数是有意义的,因为
中的属性name
和age
是Record
因此,类/结构/枚举也添加了上下文,因此可以避免不必要/多余的单词。
具有副作用的功能用动词表示
没有副作用的功能用名词表示
请参阅以下链接以进行突变和非突变功能。
答案:
因此,这取决于上下文并尝试查看API的用法,这将提供更多的见解。如何设计API。
record.save()
注意:以上只是一个示例,您的方案中可能是save
功能可能是不同上下文的一部分。
参考:
https://swift.org/documentation/api-design-guidelines/