标签归档:Swift

浅谈 Swift 语言

在刚过去不久swift_taylor的万众瞩目的 WWDC 2014 上,苹果发布了 Swift 语言。注意这个和已存在很久的 Swift Parallel Language (http://swift-lang.org/) 是两个东西。这是由苹果独立开发完成的,基于 LLVM 的全新语言,是一个从头到脚都打上苹果烙印的新东西。作者于是来赶趟儿简单写写对 Swift 语言的体会和感受。

Swift 做为一个崭新的2014年才发布的语言,全身上下都透着各种狂拽酷炫吊炸天的味道。从各家语言中博采众长,非常具备时代气息。关于 Swift 从哪些语言里继承了哪些特点,各家说法都有。个人第一印象觉得 Swift 更像 Ruby 一些。

然而做为一个新生语言,Swift 也有着一些小缺点:

  • 你依然需要学Objective C。Swift的大量底层库还是Objective C写的。如果真想写个游戏的话,难免还是会涉及调用大量的Cocoa风格的API。当然,有一部分Objective C的库已经专门为Swift进行了参数简化和改写,你有时候不需要再写Objective C里的反人类的长达几十个字母的常量名了。比如:let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)
  • 缺少私有属性、异常处理等机制。私有属性很多语言都没有,个人觉得没有太大关系;异常处理的话,做为新时代语言来说,缺少了还是比较不应该,虽说Objective C里也没有。
  • 类型非常诡异的复制特性。比如下面代码
    var ages = ["Peter": 23, "Wei": 35, "Anish": 65, "Katya": 19]
    var copiedAges = ages
    copiedAges["Peter"] = 24
    println(ages["Peter"])
    // 23
    var a = [1, 2, 3]
    var b = a
    a[0] = 42
    println(a[0])
    // 42
    println(b[0])
    // 42
    a.append(4)
    a[0] = 777
    println(a[0])
    // 777
    println(b[0])
    // 42

    大家可以体会一下这让人毛骨悚然的设计。简单说就是字典赋值都会复制一份出来,而数组不会。但是数组一旦长度做了更改也会立刻原地复制一份出来。这种设计模式很让人摸不到头脑,比较反常识。
  • 文档依然不是很齐全。需要较长时间来补充。
  • 无法跨平台。说到这一点确实有人要说这是勉为其难了。Apple凭啥做个能跨Android的东西来呢。然而,大概询问了几家游戏开发公司,都表示最大得导致他们不会用Swift开发游戏的原因就是没法跨平台。而现有的很多游戏引擎都做到了跨平台开发。

由于 Swift 的优点太多,网上也有很多人做了分析,这里就不一一详述了。这里只想总结说,Swift 确实是门开发效率非常高的语言。如果你只做 iOS/Mac 开发,Swift 现在是你的第一选择。

有人问 Swift 会不会是 iOS 开发的未来。我可以毋庸置疑的回答,是的。Apple的策略倾向导致,将来会有大量的资源像 Swift 倾斜。对于一个公司策略级的开发语言来说,Swift 的前途已经注定灿烂了。就像 Apple 描述 Swift 的那样:A complete replacement for both the C and Objective-C languages。

最后祝大家在 Swift 学习中能找到乐趣。