电影
swift编程语言(技术控眼里的Swift语言:谁说0基础?)

知乎ios开发黄兢成:有些人学Swift语言特别快,因为之前的基础好。语言的语法只是表面,表面的东西总是变动得比较快的。底下的东西重要得多,而看不见,说它0基础的人完全菜鸟。

swift 的类型,可以桥接到 objc 的类型,反之亦然。如 string 对应原来objc的NSString, closures对应objc的block,等等。objc 积累下来的大量库,实现不用改写,swift 就直接可以使用。(最多加个声明文件)。

objc

dispatch_apply(size_t iterations, dispatch_queue_t queue,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

func dispatch_apply(iterations: UInt, queue: dispatch_queue_t!, block: ((UInt) -> Void)!)

我怀疑,swift中的接口文件,是利用原来objc,c中的接口文件自动程序生成的。同一个工程,可以同时使用swift, objc, c, c++ 四种编译语言(额外嵌入的脚本语言另算),原来的 iOS/Mac 工程,已经可以同时使用objc, c, C++三种语言。现在支持第四种。objc, c, c++三种语言的结合很容易, objc跟c本身就兼容,objc跟c++结合只要将文件名改成.mm。而swift跟其它语言的结合,需要另外的文件进行桥接,其实也挺方便的。

import CoreAudio

就可以使用了。

【swift写法看起来像脚本语言,但它是真正的编译语言】

let a = 4

没有类型定义,就想当然的觉得它是脚本语言,解释执行,这是错误的。上面两行语句是用了类型推导,类似 C++ 里面的auto。swift跟objc的运行时环境一样,写的程序跑起来不会比objc慢。swift区分了struct和class, 分别使用传值跟传引用。适当地使用struct,应该会比objc要快一点。swift 吸收了很多其它语言的语法,写起来比objc简洁得多,不过它骨子里面的概念,跟原来objc差不多。

比如面向对象,常用概念无非是,继承,多态,封装,信息隐藏等。继承又可能分成多重继承,接口继承,实现继承。或者还会有些嵌套类,嵌套函数等等。当明白语法背后的概念,知道为什么需要有这些东西。之后从一门语言切换到另一门有着相同概念的语言,其实很容易。

感觉上,swift有着 obj-c, C++, Ruby的影子。

tuple,终于可以返回多个数值了。一行交换两个值。C++里面的tie+tuple也可以实现类似功能,不过使用库,显得噪音太多。

switch,case里面的条件匹配。

【swift是objc的一块大大的语法糖】

【swift的新语法,可以很好地支持内部DSL】

getHourSeconds(3)

extension Int

var hours:Int

return self * 3600

var ago:Int

return -self

}

3.hours

分别是3小时后的秒数,3小时前的秒数。

10.days

这种写法,看起来跟原来的命令式写法完全不同。这些程序是描述性的。原来的objc, 做不到这点。 我估计swift以后会冒出大量这样风格的库。

【认为所有人都是0基础的,是错误的】

我相信有些人,在两个小时之内就可以使用这门新语言。

之前苹果的员工,Bret Victor 演讲过个视频。提到这个这种可视化编程。当我们每一步操作,都得到实时地反馈,我们的做法会有很多不同,做出的东西也会不同。这个Playground,用来学习swift的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。

我自己写的新项目,将会有一部分使用swift来编写。但还是会以objc为主。发觉现在Xcode 6 beta版本,对swift的语法提示支持不好,不能打几个字母就自动完成。再观察一阵子。我不敢展望太多,或者预测什么,通常提前预测都是错的,会让人抓住把柄。但感觉Apple发布swift, 绝不是玩玩而已。

(关注更多钛媒体作者观点,参与钛媒体微信互动(微信搜索“钛媒体”或“taimeiti”))


顶一下()     踩一下()

热门推荐

发表评论
0评