2KB项目,专业的源码交易网站 帮助 收藏 每日签到

Swift 在对 Objective-C 改进的 6 个方面

  • 时间:2019-01-23 18:35 编辑:2KB 来源:2KB.COM 阅读:304
  • 扫一扫,手机访问
  • 分享
摘要:
Swift Objective-C 英文原文:6 Ways Swift Improves On Objective-C

Swift2

在 Atomic Object 的安娜堡办公室,我们做了一个观看2014年的WWDC主题演讲,毫不夸张地说,当Swift宣布的时候,我们感到十分激动。Swift,苹果正在推进的一个更现代的编程语言。我很高兴能获得先机并开始用它开发。 

在这篇博文中,我将重点介绍Swift的几个语言特性,这将使开发者的工作更加轻松。

Objective-C语言的问题

当一个开发者申请一个关于Atomic Object的新职位时,我们会给他填写一个(GTKY) Getting To Know You的表。这个表要求填写一些常见的问题,包括技术和其他方面,比如你最喜欢的语言是什么,你会做些什么来改进它?很多开发者的回答不能令人满意,即使开发人员选择objective-C作为他们最喜爱的语言时,也想不出如何改进它!
这个回答产生了大量的讨论,让我想起一个Objective-C的问题。仅举几例:

  • 弱类型 - 通常处理id或class,并且需要可怕的C static casts 。

  • 欠佳的枚举语法 - for in已经很好了,但我经常想到一个更好的索引。

  • 缺少操作符重载的类,例如NSNumber的。

所以,我很高兴苹果宣布swift并公开了其语言细节。在这里我会谈一些对Objective-C语言的批评。我强烈建议开发人员下载Swift的书,看一看在Xcode 6的测试版。

激动人心的Swift特性

1. 类型推断

对我来说这个很有用。无比烦恼的是你不得不将id类型的实例非安全的转化为实际类型,这很容易出错并且向一个实际对象并不相应的id发送信号。总是检查respondsToSelector太乏味了。Swift给我们提供了一个解决方案---var关键字:

1> var anInt = 0
  anInt: Int = 0
2> var aDouble = 0.0
  aDouble: Double = 0
3> var anotherDouble: Double = 0
  anotherDouble: Double = 0
4> var aString = "some string"
  aString: String = "some string"

注意:就像anotherDouble那种情况,你也可以显示的设置类型。可以用var同样的方式使用let来推断常量的类型。

2. 改进枚举语法

Objective-C有不错的集合枚举语法:

for (SomeType someObject in array)
    NSLog(@"%@", someObject.whatever);

这是个不错的语法糖,但是问题是现实编程中,我通常需要一个和集合中元素实例一起的索引变量。.

Swift 给了我们许多有用的集合枚举器, 但是尤其令人高兴的是他们提供了一个全局的enumerate()方法,可以用来返回一个包含了数组中元素和索引的元组。

19> array
$R2: String[] = size=4 {
  [0] = "one"
  [1] = "two"
  [2] = "three"
  [3] = "four"
}
20> for (index, value) in enumerate(array) {
21.     println("Item (index): (value)")
22. }   
  Item 0: one
  Item 1: two
  Item 2: three
  Item 3: four
23>

3. Override关键字

当在类中声明一个实例函数时,如果他们覆盖了一个基类函数,他们必须标记为override的。如果没有这么做则会得到一个编译时错误。类似的,如果一个标记为override的函数没有覆盖基类的相应函数,同样得到一个编译错误。这一行为将的类更加的清晰和降低运行时崩溃的可能性。

4. 多返回值

在我加入Atomic之前的那份工作中,我主要开发C++,并且经常发现自己写一些输出多值的方法。我总是为决定使用引用,pair还是将返回值包装为struct或class来作为参数传递而挣扎不已。

在Swift中,有内置的机制来用一个由任意数量的带标记的数据成员的组成的元组作为多返回值。

46> func calculateStatisticsFromArray(data: Double[]) -> (mean: Double, median: Double, mode: Double) {
47.          return (62, 44, 12)
48. }   
49> var stats = calculateStatisticsFromArray([])
stats: (mean: Double, median: Double, mode: Double) = {
  mean = 62
  median = 44
  mode = 12
}
50> stats.mean
  $R10: Double = 62
51> stats.median
  $R11: Double = 44
52> stats.mode
  $R12: Double = 12

Swift同样支持声明多个变量来显示的获取多返回值:

<51> var(mean, median, mode) = calculateStatisticsFromArray(data)

5. willSet, didSet

在 Swift中, 类具有属性(类似于Objective-C)。有一个声明setter和getter的机制,如果属性的类型是简单的并且需要计算的,但是你想观察他们的变化,两个内置的需要覆盖的方法-willSet和didSet将会有帮助。

1> class Container {
2.     var someValue: Double = 0.0 {
3.         willSet {
4.             println("willSet! (newValue)") 
5.         }
6.         didSet {
7.             println("didSet! (someValue)")
8.         }
9.     }
10. }
 
11> var c = Container()
  c: Container = {
    someValue = 0
  }
12> c.someValue = 100.0
  willSet! 100.0
  didSet! 100.0

6. REPL

REPL表示“read-evaluate-print-loop”,我认为它是通过沙箱测试输出的代码.您可以输入代码到REPL,如果您在使用一个IDE或者喜爱的文本编辑器,它会被编译/解释和实时运行,并马上能让你看到输出结果。这是开发人员努力学习这门新语言时能看到的一个强大功能。我一直在使用它来学习swift。

使用SWIFT REPL:

1.下载Xcode 6 Beta版。

2.在终端中运行以下命令来切换路径xcrun:

 sudo xcode-select -switch /Applications/Xcode6-Beta.app/Contents/Developer.  

 注意:如果要重置,请在使用终端里键入 xcode-select -r

3.xcrun swift

谁将拥有未来?

我坚信,在iOS 8和以后的版本中,Swift将成长成为iOS开发的主流语言。尽管如此,苹果已经向我们保证,在运行时将保持二者兼容:我们的Objective-C应用程序仍然可以继续工作。同样清楚的是Swift的语法和语义将改变后的iOS 8。苹果告诉我们,他们不能保证源代码的兼容性,但会提供代码转换器。使用代码转换器的想法让我害怕了一下,我认为迁移到Swift的时间会来得早(iOS的8-9的样子),而不是以后。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部