当前位置: 首页 > news >正文

我在开发第一个Swift App过程中学到的四件事

本文转载至 http://www.itjhwd.com/wzkfyigeswiftsjs/


译者注:本文作者Greg Heo,这是他为讲授iOS 8 App Extensions视频教程而实际使用Swift开发了一款App的经验,来看看他的心得体验。

这个夏天我的app开发项目是Instant Poetry 2,它原本是Ray还是独立iOS开发者时编写的一个应用,现在我需要用Swift和iOS 8 API将它整个重写一遍。

对我来说这是一次丰富的学习体验 – 不但深入学习Swift和iOS 8的复杂细节,还思考了在未来如何更好的将这些经验传授给别人。

这里我就将在开发第一个Swift app过程中学到的四件事,分享给大家。

4) Swift仍然在演变当中

在整个夏天,Swift语言本身有了不少变化。我开始编写app时使用的Swift版本是beta 3,而每一次Xcode版本升级都带来语法变化和Cocoa方法签名的微调。

我在开发第一个Swift App过程中学到的四件事 - 第1张  | IT江湖

 

如果你计划使用Swift开发应用,你需要花精力关注这些变化并跟上Swift演进的步伐。

不过我认为这种精力花费的值得。使用最新和最好的工具是很重要的,另外关注语言的演变本身也将成为很好的学习经验。苹果一直关注和倾听来自开发者对于Swift的反馈和问题报告,所以你甚至有机会参与到这个语言成型的进程当中。

3) Swift暴露出Cocoa不太好的一面

你是否期望获取一个包含多个SKProduct对象的Swift数组?抱歉,Cocoa将返回给你包含AnyObject的隐式解析可选类型的数组(implicitly unwrapped optional array)。

你是否想传递一个[NSObject: AnyObject]类型的Swift数组给对应的方法?抱歉,Cocoa真正想要的是一个NSDictionary,或者一个会导致静默失效(silently fail)的东西。

你能够感觉到Swift和Cocoa之间的紧张气氛:Swift想要做某件事,但它不得不为了适应Cocoa而做折衷。我们必须面对这样一个事实,从Swift透镜来看Cocoa并不总是漂亮的!

 

我在开发第一个Swift App过程中学到的四件事 - 第2张  | IT江湖

 

这里有一个坏消息和一个好消息。

坏消息是我们正处在一个过渡当中,苹果在每次Swift/Xcode升级中所做的一部分事情,就是清理Swift-Cocoa的接口,来让它们更好的兼容。

好消息是苹果很善于过渡,你可以回想一下从PowerPC到Intel处理器的过渡、经典Mac OS到OS X的过渡等等。未来的某一天,Cocoa也将会原生的完美支持Swift语言。

2) Swift和Objective-C是幸福的一对

真的,这是我之前观点的一个必然推论 – 你可能觉察到Swift某些地方挺怪异,是因为它需要在Objective-C runtime和Objective-C API下工作,所以只能做出妥协。

 

 

 

我在开发第一个Swift App过程中学到的四件事 - 第3张  | IT江湖

 

 

从实际开发来看,在我的Swift app里使用Objective-C第三方类库和扩展非常简单,我只需要将它们的头文件导入到我的bridging header,它们就能正常工作了。

如果你有一个喜欢的库是用Objective-C编写的,或者已有的app,你想要在它们当中添加一两个Swift类,这不是个什么大问题。

1) Swift非常好玩

我很享受和Swift一起玩耍工作的日子。

它极富表现力。像自判断链接(optional chaining)和nil coalescing特性能让你写出更短的代码。让我最惊讶的是枚举类型给我带来的享受 – 它的确是一个双赢,让你代码更具可读性,还包括附加的好处比如类型检查和实例穷举检查。

 

 

我在开发第一个Swift App过程中学到的四件事 - 第4张  | IT江湖

 

作为Objective-C和Ruby的粉丝,我觉得Swift就像集合了这两种语言优点的混血儿。如果你学过Objective-C和Cocoa,阅读起Swift代码将没有任何困难,如果你还没有开始学习,那么就从现在开始用Swift开发一个简单的应用吧!

附加感受:Extension将改变世界!

至少对于苹果的世界是这样。在iOS 8里,苹果引入了app extension,允许开发者通过app扩展实现自定义分享选项、通知、键盘以及照片。

在Instant Poetry 2里,我使用了一个Photo Extension,让用户能够直接在Photo应用里添加词句到图片上。在这iOS 8以前是不可能做到的。

 

 

我在开发第一个Swift App过程中学到的四件事 - 第5张  | IT江湖

 

应用们从此不再被局限在自己的sandbox里了,貌似新的开放的苹果将让app能够从更多的地方做更多的事情,这是多么美好的事啊。

即便是即将到来的Apple Watch,它也是iPhone屏幕的一个扩展,我等不及想知道我们到底能用Watch Kit来做些什么。

也许我下个Swift app将是和Apple Watch有关呢!~

那么未来将是什么样的?

我的预测是,Swift的一些粗糙的地方将在短时间内被反复打磨。很快,Swift开发的应用将会无处不在,并且在Github上,Swift项目将远远超过Objective-C。

不过如果你现在开始开发Swift应用的话,你将会面临一些挑战。由于Swift的快速演变,我认为Swift 1.0项目迁移到Swift 2.0需要做不少工作,虽然比起从Objective-C迁移到Swift肯定要轻松一些。

不过这也正是我们热爱科技的原因,不是吗?学习新知识、跟上潮流、使用最新最好的语言和API,这些能让我保持兴奋。

 

 

我在开发第一个Swift App过程中学到的四件事 - 第6张  | IT江湖

 

最后,如果你想看看Instant Poetry 2能做什么,你可以从App Store免费下载。

你是否已经开始你的Swift开发旅程呢?如果是的话,我想听听你的体验看法。

 

原文:Four Things I Learned Making My First Swift App 译文:cocoachina

 

IT江湖 swift专栏

相关文章:

  • 【小小决斗】我看你不顺眼很久了,快来和我一决高下!
  • [NHibernate]条件查询Criteria Query
  • SQL-12 获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary...
  • DataGridView隔行显示不同的颜色
  • 获取随机数,要求长度一致的字符串格式
  • 润乾集算报表多样性数据源之动态源
  • springsecurity 源码解读 之 RememberMeAuthenticationFilter
  • 算法:四舍六入五成双 ,保留三位有效数字
  • VS 编码规范---- 代码注释设置
  • Tuxedo入门学�
  • mybatis的collection查询问题以及使用原生解决方案的结果
  • javaweb_CSS
  • sam哥其实是个安静的美男子...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 经典面试题1
  • ----------
  • angular2开源库收集
  • django开发-定时任务的使用
  • ES6 学习笔记(一)let,const和解构赋值
  • HTTP 简介
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • node-glob通配符
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 开源地图数据可视化库——mapnik
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #pragma once
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (C语言)fgets与fputs函数详解
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (八)Spring源码解析:Spring MVC
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (译) 函数式 JS #1:简介
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)重识new
  • (转载)hibernate缓存
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET 4.0中的泛型协变和反变
  • .NET Core中的去虚
  • .net framework profiles /.net framework 配置
  • .net wcf memory gates checking failed
  • .net 中viewstate的原理和使用
  • .NET 中让 Task 支持带超时的异步等待
  • .net6Api后台+uniapp导出Excel
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中使用Redis (二)
  • .project文件
  • /*在DataTable中更新、删除数据*/
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [ C++ ] 继承
  • [].slice.call()将类数组转化为真正的数组
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序