这些方法中的哪一种遵循Swift意识形态?
func addChapter(_ chapter: Chapter)
func add(chapter chapter: Chapter)
func add(_ chapter: Chapter)
答案 0 :(得分:1)
从API Design guidelines开始,第一个似乎是正确的:
// Clear
func addChapter(_ chapter: Chapter)
variable.addChapter(x)
// Not clear
func add(chapter chapter: Chapter)
variable.add(chapter: x)
// Not clear
func add(_ chapter: Chapter)
variable.add(x)
注意:在Sulthan的评论之后改变了答案,请参考他的回答。
答案 1 :(得分:1)
TLDR:
根据chapter
信息对于区分其他方法/含义是否重要,您应该使用第一个或第三个选项。不是第二种选择。
包括所有需要避免歧义的人所需的所有单词,以便阅读使用该名称的代码。
...,如果第一个参数构成语法短语的一部分,则省略其标签,将任何前面的单词附加到基本名称,例如
x.addSubview(y)
在不知道课程的情况下,这不容易决定。
让我们考虑这是一个类:
class Book {
var chapters: [Chapter]
var pages: [Page]
var metadata: [MetaData]
}
如果您查看Swift Evolution 0005关于导入Obj-C方法的方法,您可以了解导入方法[UIView addGestureRecognizer:]
的首选方法是addGestureRecognizer(_:UIGestureRecognizer)
。
请注意理由:
如果我们放弃GestureRecognizer,只留下添加,我们最终会得到一个概念上修改gestureRecognizers属性但使用过于通用名称的方法。
这就是为什么有一条规则
永远不要从与封闭类的属性匹配的方法的基本名称修剪后缀:
您的第一个选择是正确的解决方案。
另一方面,如果您的班级有以下形式:
class Chapters {
private var chapters: [Chapter]
}
(例如,类似阵列的容器)
然后add(_:)
是正确的解决方案。
永远不要使用第二个选项add(chapter:)
。
答案 2 :(得分:0)
我认为这取决于具体情况。
例如,您有User struct。
struct User {
static func add(with userId: String) {
// ...
}
static func addFollower(for userId: String, _ followerId: String) {
// ...
}
}
当你使用它时:
User.add(with: newUserId) // Like sentense: User add with new user Id
和
User.addFollower(for: currentUserId, followerId) // Like sentense: User add follower for current user Id
希望有所帮助
答案 3 :(得分:0)
就个人而言,我会选择
func add(chapter: Chapter)
这个解决方案似乎对我来说最清楚。