2016-07-24 43 views
2

注意:我只在这里谈论Swift 2。我们应该为方法的第一个参数添加一个外部参数名称吗?为什么?

我所看到的二种方法的命名惯例:

func animateWithDuration(duration: NSTimeInterval, animation:() -> Void) 

func animate(withDuration duration: NSTimeInterval, animation:() -> Void) 

我听说,其中之一即是多 “SWIFTY”。但我不记得哪个。但为什么人们会关心这个呢?调用时这两个公约看起来几乎是一样的:

animateWithDuration(10) { ... } 

经文

animate(withDuration: 10) { ... } 

当您尝试大声朗读的方法了,这是完全一样的话:

动画与时间10

那么哪个更快捷,为什么?

回答

1

前者语法是斯威夫特2的首选/默认的语法,而后者是斯威夫特3.

首选/默认语法在WWDC 2016的视频,Swift API Design Guidelines,他们形容自己的这个老,前者印象Cocoa API中的语法:

因此,当您将所有为Objective-C编写的API修改为Swift而未修改时,它们看起来有点过时了。他们觉得有点不太敏捷。

所以,按照苹果自己的估计,新的语法更为Swifty。尽管如此,如果你限制自己去考虑Swift 2.x,为了保持一致性,你可以轻易地提出一个坚持传统语法的论点。另外(在我看来,更引人注目的是),你可以开始采用新的语法,你可以自然而然地采用这种新的语法来简化Swift 3的迁移路径。

但我认为这不像“总是在方法名中包含参数名”或“不是”那么简单。在Swift 3中有些情况下,我们将定义一个方法,其第一个参数不会有外部参数名称(就像在Swift 2中,有些情况下我们会为第一个参数提供一个外部名称)。最好让原则in that video(或outlined on the swift.org site)管理您的方法命名实践。

+0

'你可以开始采用新的语法,你可以自然地这样做,以缓解Swift 3迁移路径。绝对是这样。一致性的临时边际收益在几个月内不值得重构。 – Alexander

1

讨论编码风格是有点多余的,有很多争论或反对之一。重要的是Swift 3 API将使用第二种风格,因此建议将其用于Swift代码。

一些参数,它说明了第二样式是,它是与多个参数更一致,如

animate(withDuration: 10, andEffect: .Blend) 

另一种说法是,它使得关键字参数一致,例如与init

let a = Animation(withDuration: 10, andEffect: .Blend) 

毕竟()调用语法不摆在首位句子风格的方法调用打得那么好。 Smalltalk或ObjC用这个(IMO)好得多。

相关问题