我今年夏天的应用程序开发项目是InstantPoetry2,这是Ray在他还是独立iOS开发人员时编写的应用程序,现在我需要使用Swift,iOS8API将重写它完全。这对我来说是一次丰富的学习经历——不仅深入学习了Swift和iOS8的复杂性,而且还思考了将来如何最好地将这种经历传授给其他人。在这里,我将与大家分享我在开发第一个Swift应用程序过程中学到的四件事。4)Swift仍在不断发展整个夏天,Swift语言本身发生了相当多的变化。我开始编写应用程序时使用的Swift版本是beta3,每次Xcode版本升级都会带来语法更改和对Cocoa方法签名的细微调整。如果你打算使用Swift来开发应用,你需要关注这些变化,跟上Swift进化的步伐。但我认为这是值得的。使用最新和最新的工具很重要,关注语言的发展本身就是一种很好的学习体验。Apple一直在关注和听取开发者对Swift的反馈和问题报告,所以你甚至可能有机会参与语言塑造的过程。3)Swift暴露了Cocoa不好的一面你期望得到一个包含多个SKProduct对象的Swift数组吗?抱歉,Cocoa将返回一个包含AnyObject的隐式展开的可选数组。是否要将[NSObject:AnyObject]类型的Swift数组传递给相应的方法?抱歉,Cocoa真正想要的是一个NSDictionary,或者默默失败的东西。你可以感受到Swift和Cocoa之间的紧张关系:Swift想做点什么,但它不得不妥协以适应Cocoa。我们不得不面对一个事实,即Cocoa在Swift镜头下并不总是那么漂亮!这里有坏消息和好消息。坏消息是我们正处于过渡期,Apple对每次Swift/Xcode更新所做的部分工作是清理Swift-Cocoa接口,使它们更加兼容。好消息是Apple非常擅长过渡,你可以回想一下从PowerPC到Intel处理器的过渡,经典的MacOS到OSX等等。未来的某一天,Cocoa也会原生支持Swift语言。2)Swift和Objective-C是幸福的一对。真的,这是我之前观点的推论——你可能会注意到Swift在某些地方很奇怪,因为它需要Objective-C运行时和Objective-CAPI的下一个工作,所以只能做出妥协。从实际开发的角度来看,在我的Swift应用中使用Objective-C第三方类库和扩展是非常简单的。我只需要将它们的头文件导入到我的桥接头文件中,它们就可以正常工作了。如果你有一个用Objective-C编写的最喜欢的库,或者一个现有的应用程序,并且你想向它们添加一个或两个Swift类,那不是什么大问题。1)Swift非常有趣。我真的很喜欢和Swift一起玩耍和工作。它非常有表现力。可选链接和nil合并等功能允许您编写更短的代码。最让我惊讶的是我从枚举类型中获得的乐趣——这真的是双赢,让你的代码更具可读性,还有类型检查和实例耗尽检查等额外好处。作为Objective-C和Ruby的粉丝,我认为Swift就像是结合了两种语言优点的混合体。如果你学过Objective-C和Cocoa,那么阅读Swift代码就不会有任何困难。如果您还没有开始学习,那么现在就开始使用Swift开发一个简单的应用程序吧!附加感想:扩展将改变世界!至少在Apple世界中是这样。在iOS8中,Apple引入了应用扩展,允许开发者通过应用扩展自定义共享选项、通知、键盘和照片。在InstantPoetry2中,我使用了一个PhotoExtension,允许用户直接在Photo应用中向图片添加文字。这在iOS8之前是不可能的。应用程序不再局限于它们自己的沙箱。似乎新的开放式苹果将允许应用程序从更多地方做更多的事情。多么美妙的事情。即使是即将推出的AppleWatch,它是iPhone屏幕的扩展,我也迫不及待地想看看我们可以用WatchKit做些什么。也许我的下一个Swift应用程序会与AppleWatch有关!~那么未来会是什么样子呢?我的预测是Swift中一些粗糙的地方会在短时间内重新打磨。很快,用Swift开发的应用程序将无处不在,Github上的Swift项目数量将远远超过Objective-C。但是如果你现在开始开发Swift应用程序,你将面临一些挑战。由于Swift的快速发展,我认为将Swift1.0项目迁移到Swift2.0将需要大量工作,尽管这肯定比从Objective-C迁移到Swift更容易。但这就是我们热爱技术的原因,不是吗?学习新事物、紧跟潮流、使用最新的语言和API让我兴奋不已。***如果你想看看InstantPoetry2能做什么,你可以从AppStore免费下载它。你开始你的Swift开发之旅了吗?如果是这样,我想听听您对您的经历的看法。英文原文:http://www.raywenderlich.com/86278/four-things-learned-making-first-swift-app
