在Objective-C中,您可能有一个像这些
之类的方法-(void)addWidget(Widget*)widget classification:(WidgetClassification*)classification;
-(void)setText:(NSString*)text color(UIColor*)color style:(FontStyle)style
在Swift 3+中,你可以选择将名称翻译成这两个(让我们称之为Objective-C风格):
func addWidget(_ widget: Widget, classification: WidgetClassification)
func setText(_ text: String, color: UIColor, style: FontStyle)
或者这个(我们称之为swift 3风格)
func add(widget: Widget, classification: WidgetClassification)
func set(text: String, color: UIColor, style: FontStyle)
我个人认为后者set(text...
看起来感觉更好,但是当回到Objective-C时,编译器会把它翻译为setWithText:(NSString*)text...
,感觉有点奇怪。
是否有既定的惯例? setText(_ text: String...
变体更适合Objective-C,但不喜欢它与所有参数名称暴露的Swift 3样式对齐
我很感激对此有任何意见以及人们对此的看法
答案 0 :(得分:1)
忽略不必要的单词。名称中的每个单词都应该突出显示 使用现场的信息。
可能需要更多的词语来澄清意图或消除歧义意义, 但那些与读者已有信息多余的东西 应该省略所有权。特别是,省略仅仅的单词 重复类型信息。
public mutating func removeElement(_ member: Element) -> Element? allViews.removeElement(cancelButton) In this case, the word `Element`
在呼叫网站上没有任何显着内容。这个API会更好:
public mutating func remove(_ member: Element) -> Element? allViews.remove(cancelButton) // clearer Occasionally, repeating type
信息是避免歧义的必要条件,但一般来说都是如此 最好使用一个描述参数角色的词而不是它的角色 类型。有关详细信息,请参阅下一项。
答案 1 :(得分:1)
感谢swift api设计指南的链接。
虽然他们没有明确地说出来,但是有足够的线索可以让我认为swift 3的创建者肯定打算在这些情况下仍然使用Objective-C命名样式。 / p>
首先,"补偿弱类型信息"部分将此显示为" Good"例如:
func addObserver(_ observer: NSObject, forKeyPath path: String)
grid.addObserver(self, forKeyPath: graphics) // clear
由于KVO是一个客观的C事物,但它没有让我信服它,但是在公约/参数部分中,他们将其视为另一个" Good"例如:
/// Replace the given `subRange` of elements with `newElements`.
mutating func replaceRange(_ subRange: Range, with newElements: [E])
例如,挖掘Array类定义,找到
public func dropLast(_ n: Int) -> ArraySlice<Element>
public func withUnsafeBytes<R>(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R
和各种类似的方法,都使用&#34; Objective-C&#34;命名风格。
对我而言,似乎swift的作者打算采用我的set(x:
命名方式,他们会调用这些方法
replace(subrange: Range, with newElements: [E])
drop(last n: Int)
with(unsafeBytes body: ...
但他们没有。
看起来他们走的是#34;通常不会压制第一个参数的外部名称,除非语法让你觉得这样做更好“&#34 34。
我想这可能对整体可读性来说更好,即使它需要更多的努力来思考。
谢谢!