swift的缺陷和机会

董一凡 发布于 2014年06月03日 | 更新于 2014年06月03日
tinyfool 等1人欣赏。

WWDC2014最大的震撼恐怕就是swift了(虽然对我来讲,metal更震撼)。昨晚2点多看完后,完全睡不着了,看新出的那本guide,看了个7788后,很激动,比起ObjectiveC,swift确实是更现代的一门语言。Xcode下好后,第一时间体验了下。结果怎么说呢,心情很复杂。

以上是前言。

语言本身的好处就不说了,会有无数的人来评判。现在来说说最大的问题,swift只能和ObjectiveC交互,而不能和C/C++直接交互,这意味着什么呢:

  • 没有gcd (更正一下,现在已经有gcd的swift接口了,多谢楼下)
  • 没有coreanimation
  • 没有coretext
  • 没有STL

这个列表还可以继续下去。所以swift其实能干的事情比想象中的少的多的多。你基本就被限制在了UIKit系里了。

另一个问题是,swift不支持异常。所以当你调用ObjeciveC的时候,必须保证ObjectiveC的异常不会抛出。可选的方法应该就是把异常转换成error code,不然程序就直接挂了。这个问题,怎么说呢,很恶心。

就第一个问题来讲,其实给大家带来了一个非常大的机会,就是把所有C接口的东西都包装成ObjectiveC的module,做library赚人品,赚钱,赚名声,喜欢什么就看你们的了,反正我第一时间肯定是要移植GCD的。

最后,希望Apple能提供更多的library给swift,一个语言好不好用,和语法有关系以外,和library的丰富程度也是极其相关的。

共16条回复
minddriven 回复于 2014年06月03日

swift 的创新之处是在于其 IDE 带来的可视化编程的革新吧。

不是拖拉控件的可视化,而是对于动画轨迹的可视化。这种变化,可以让凡人做动画编程更容易,让牛人做动画编程更诡异。

swift 其实不是在 c 于 obj-c 之间的语言,应该是比 obj-c 更高级的语言。

但是这不妨碍其比 objc-c 更快。

khaos 回复于 2014年06月03日

估计这几天的WWDC的各个Lab里基本上就是让大家感受这东西的缺陷然后鼓励大家赶紧来给苹果提供各类library吧

tinyfool 回复于 2014年06月03日

据说已经有GCD支持了,我还没细看,我觉得这些库都不难支持,毕竟苹果开发了一个新语言,目标应该是比OC好用,所以,库的问题他们肯定在解决了,而且我感觉应该会有一些新库和新技术,主要用于Swift

terryso 回复于 2014年06月03日

GCD有啊。。。SDK的API都Swift版的。。。

Elden 回复于 2014年06月03日

Swift是兼容C的: https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//appleref/doc/uid/TP40014216-CH8-XID13

放开那个西红柿 回复于 2014年06月03日

注意swift并不是C和C++,估计也不会是全平台语言,所以为什么要用STL?

yangjie6020 回复于 2014年06月03日

中午看了一会swift的语法 我想 我已经爱上这门语言了

董一凡 回复于 2014年06月03日

3楼 @tinyfool 嗯,对的,官方对 gcd 有支持了,但是coregraphic coretext这些我还没找到

5楼 @Elden 你给的链接里,没说swift可以调用c的函数呀。不能调用c函数,那就得些obj-c的wrap了

6楼 @放开那个西红柿 STL只是个例子,如果你有几十万行的C++代码在那里,那就意味着如果你要用swift,必须得写很多很多的wrap,或许你觉得这个不是问题,这次WWDC里演示的那个画图的软件sketchbook,我在做的,90%的代码是C++

放开那个西红柿 回复于 2014年06月03日

8楼 @董一凡 没关系,反正XCode可以使用C++,权当swift是一门新语言好了。应该也不会强制全部使用swift。

董一凡 回复于 2014年06月03日

9楼 @放开那个西红柿 我个人当然是希望swift变得更通用的,所以说这里指出的是swift变的更通用前的一个障碍,所以这里边自然也有机会了。

放开那个西红柿 回复于 2014年06月03日

10楼 @董一凡 嘻嘻,不过谢谢你,我超爱sketchbook!

尼克徐 回复于 2014年06月03日

我这里,一大堆的c

Elden 回复于 2014年06月03日

8楼 @董一凡 导入C声明到bridging header file就可以调用了(Apple对系统API做了Bridging,不需要自己重新声明)

terryso 回复于 2014年06月03日

8楼 @董一凡 @Elden 给的那个链接就是教你怎么在Swift里调用C API的,只不过你不能像OC那样直接使用C API,要换一种写法而已。这里有Demo:link text

guofengcn 回复于 2014年06月03日

大家下手都太快了!我查到swift-china.org域名已经被抢注了。。。

尼克徐 回复于 2014年06月03日

15楼 @guofengcn 哗,这么有头脑...

本帖有16个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]