它来了:Swift API 的重大转型
Cocoa、Swift 标准库,甚至您自己的类型和方法——这一切都将改变,您可以帮助决定如何改变。
自从 Swift 发布之前,Cocoa 接口和 Swift 标准库中的 API 之间就存在风格差距;很多东西看起来就是不同,通常是不必要的。这不仅仅是美学上的问题;不统一和缺乏可预测性使一切都变得更加困难,从编码到调试再到维护。幸运的是,尽管存在这种差距,Swift 开发者还是创造了大量出色的代码,并且在此过程中,逐渐形成了一种对“Swifty”代码外观和感觉的认识。
基于这种经验,当我们审视我们的 API 时,很容易看出还有改进的空间,无论是在编译器导入 Objective-C API 的方式上——结果似乎在 Swift 中不太舒服——还是在 Swift 标准库中,后者缺乏 Cocoa 用户期望的规律性和连贯性。因此,我们在 Apple 决定为此做些什么。
为了使 Cocoa 和标准库趋于一致,我们需要一个目标:一种统一的、书面的 API 设计方法,每个人都可以遵循。我们首先回顾并质疑我们所有的旧假设。现有的指南非常棒,但很多材料都是针对 Objective-C 的,没有涵盖 Swift 特有的功能,例如默认参数,更重要的是,它们没有受到我们认为对捕捉如此重要的“Swiftiness”的出现意识的影响。
在我们制定这些指南时,我们将它们应用于标准库、所有 Cocoa 和几个示例项目。我们评估了结果,进行了改进并重复。在 Swift 开源之前,我们会在幕后完成这一切,并在下一个版本中向您展示结果,但 Swift 的新时代已经来临:是时候向世界展示我们一直在做什么了。这是一个关于代码在转换前外观的微小示例
class UIBezierPath : NSObject, NSCopying, NSCoding { ... }
...
path.addLineToPoint(CGPoint(x: 100, y: 0))
path.fillWithBlendMode(kCGBlendModeMultiply, alpha: 0.7)
和之后
class UIBezierPath : Object, Copying, Coding { ... }
...
path.addLineTo(CGPoint(x: 100, y: 0))
path.fillWith(kCGBlendModeMultiply, alpha: 0.7)
我们已将这项拟议的转型的三个部分提交给 Swift 的演化小组进行公开审查:关于如何导入 Cocoa 的更改、关于标准库表面更改,以及将这一切联系在一起的 API 指南。改进建议已经开始从参与者那里涌入,我们能够看到它们如何 影响 API。
path.addArcWithCenter(
origin, radius: 20.0,
startAngle: 0.0, endAngle: CGFloat(M_PI) * 2.0, clockwise: true)
变成这样
path.addArc(
center: origin, radius: 20.0,
startAngle: 0.0, endAngle: CGFloat(M_PI) * 2.0, clockwise: true)
我们会做出这个改变吗? 结论尚未确定,但现在是让您发出声音的时候了。审查期已延长至2 月 5 日星期五。如果您想帮助塑造您的语言和框架的未来,请加入讨论。提案和相关的审查线程在这里