什么时候是采用Swift 3的正确时间?
自苹果推出Swift以来已经两年了。
在最初的12个月中,我很犹豫地推荐Swift作为一种实现语言。 实际上,我认为我的确切话是“不”。 在Swift大一的时候,这些工具不稳定,语言和库还很不成熟。
但是,在过去的12个月中,语言在不断发展壮大。 苹果公司开源了Swift,并通过Swift.org向更广泛的社区开放了该语言的发展。
这鼓励了社区通过Swift Evolution流程对Swift做出的巨大贡献,而即将发布的Swift 3也从这些努力中取得了成果。 Swift 3带来了该语言在其短生命周期中所看到的最重大的变化。
Swift 3和“伟大的重命名”
Swift 3带来的最重大更改可能是“ The Great Renaming”。
去年这一年,Swift Evolution Process提出了许多建议,以澄清和标准化Swift标准库的命名方案,以及Swift如何导入Apple现有的框架(如Foundation,UIKit和Core Graphics)。 这产生了“ Swift API设计指南”。
这个新的命名标准意味着在使用这些框架时,Swift 3将与Swift 2完全不同。 随着向Swift 3的迁移,几乎所有现有的Swift代码都将需要迁移到新的命名标准并遵循这些准则。
Xcode 8包含一个迁移工具来帮助完成此过渡。 工具很棒,但是就像大多数工具一样,它可以节省您的工作,而不是从过程中消除所有想法。 我认为,所有Swift应用程序代码仍将需要由人工迁移来审核和审查。 此外,迁移工具无法帮助您将现有的应用程序代码转换为新的API准则。 它仅解决您的代码如何与Apple框架交互以及该API的更改方式。
Swift 3和ABI稳定性
Swift 3的目标之一是ABI稳定性。 这没有发生。 这意味着为了将项目升级到Swift 3,该项目的所有Swift依赖项也都需要更新到Swift3。不可能将Swift 3应用程序与Swift 2库链接。
在接下来的12个月中的某个时候,Swift 3很有可能达到ABI的稳定性,而在今年的WWDC上,克里斯·拉特纳(Chris Lattner)表示,在考虑日后对语言的更改时,保持源代码兼容性将是一个强大的约束。 因此,希望明年不再需要“ Great Renaming 2”。
何时切换到Swift 3?
团队现在应该开始为此进行计划。 根据现有Swift代码库的规模,此迁移可能会对项目产生重大影响。 在主应用程序可以采用Swift 3之前,所有项目的依赖项也都需要采用Swift3。采用Swift 3并迁移到新的API指南的库可能会因此改变自己的API。 这意味着需要更改应用程序中库代码的许多用法。 Xcode 8迁移工具无法解决这些问题。
为了简化Swift 3的采用,开发人员应该熟悉新的API设计指南,并从今天开始在新代码中采用它们。
如果您已经有一个Objective-C代码库,并且还没有开始采用Swift,那么您可能要等到今年晚些时候发布第3版之后再采用Swift。 与在后期采用Swift 2.x之后再经历迁移过程相比,这将使您处于更好的位置。
现在,在预览/测试版中采用Swift 3将会是一个痛苦的过程,因为还没有足够的第三方库代码。 尽管在Xcode 8和iOS 10 Beta期间这可能会迅速改变。
幸运的是,对于希望采用缓慢而稳定的方法来迅速采用Swift 3的开发人员,Apple已在Xcode 8中引入了功能,以允许开发人员在iOS 10发行版之后继续使用Swift2。Xcode8同时支持Swift 2.3和3。您不能将它们混合在一个应用程序中,但是可以继续使用2.3,直到您的项目和团队方便地将其切换到3。
Swift是可可发展的未来吗?
简短的回答:是的。
我一直认为,采用Swift的转折点将是苹果自己开始引入仅是Swift的框架时。 尽管苹果还没有走得那么远,但他们开始将仅Swift的功能引入所有基础构建的基础框架中。 可以使用这些框架进行的更改对于Swift语言来说感觉更加原生。 这些新增功能以及苹果公司将iOS的Swift Playgrounds作为一种教育辅助手段的推出,说明了苹果致力于进一步推动Swift的未来。
可能要经过很多年,Objective-C才最终屈服并退出Cocoa开发舞台,但总的来说,我认为Swift的优势正在迅速显现。 如果您还没有加入Swift潮流,那么即将进行的向Swift 3的过渡可能会提供这样做的正确机会。
Itty Bitty Apps 总部位于澳大利亚墨尔本, 为大小客户提供了出色的移动和Mac软件。 这也使 揭示 -适用于iOS开发人员的功能强大的运行时视图调试。
- iOS 10 AVPlayer不会从没有扩展名的URL流式传输video,也不会将video/ mp4作为内容类型
- NSOperationQueue mainQueue vs performSelectorOnMainThread?
- 兄弟,你甚至连SwiftLint吗?
- 奇怪的EXC_BAD_ACCESS SpriteKit removeSubsprite崩溃
- 上传图像从iOS应用程序到PHP – 不能完全正确 – 我错过了什么?
- 带有iOS的Gmail API – 收到电子邮件
- AVCaptureSession模拟器中的audio
- 为什么EAAccessoryDidConnectNotification发生两次?
- 简要介绍iOS应用程序生命周期