网易首页 > 网易游戏 > 游戏攻略 > 正文

技术控眼里的Swift语言:谁说0基础?

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


技术控眼里的Swift语言:谁说0基础?

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

【swift跟objc共用同一套的运行时环境】

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

看两个API的声明,对比一下:

objc

void

dispatch_apply(size_t iterations, dispatch_queue_t queue,

void (^block)(size_t));

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

swift

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

func touchesBegan(touches: NSSet!, withEvent event: UIEvent!)

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

这里的桥接很容易,Apple自家的各种 C 库移植过来了。比如Core Image/Audio,直接包含

import CoreAudio

import CoreImage

就可以使用了。

现在swift完全可以跟objc并存,原来的工程不建议重写,也不用重写。顺其自然,慢慢让它进化就是了。

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

初学者,看它使用了

let a = 4

var b = "hello"

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

【编程语言的语法重要,但是语法背后的概念更重要】

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

而语法会影响表达,理论上每门语言都可以表达任何概念。不过当某种概念在某门语言中,很难表达出来,就会倾向于不这样使用它,这种概念在那门语言的社区就难以被人熟知。

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

【最喜欢的3个特性】

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

closure,喜欢它的简写,还有在函数最后一参数,可以写在()外面。这些特性,用来写函数式风格的程序,会很好看。而原来objc的block, 还有c++的function, 就太啰嗦了。

switch,case里面的条件匹配。

这些语法,编译最后还是会映射成原来objc的运行模型。原来objc的概念,引用记数,ARC, 属性,协议,接口,初始化,扩展类,匿名函数等等,继续有效。

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

有个大块头的东西,是原来objc没有的,就是泛型。swift中 将那种操作写一次,就可以作用多个类型的语法叫做generics(泛型),而C++中称为template(模板),叫法不同,本质是同样的东西。总的说来,swfit 涵盖了现在流行的编程方式,结构化,面向对象,泛型,函数式。

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

有一种编程风格,不太好归类。就是将程序拆分成,描述+解释。解释部分写一次,其它地方使用描述式的语句,而不是命令式的语句。内部DSL,通常利用主语言的语法特性,创出一套写法,来写一些描述性的语句。这些语句组合起来,就像一门新语言似得。这个比较难理解。举个例子(从ruby那里借过来的),假如计算,几小时之后的秒数。C语言中,大概会写成

getHourSeconds(3)

而现在 swift中,只要定义了扩展

extension Int

{

var hours:Int

{

return self * 3600

}

var ago:Int

{

return -self

}

}

就可以写成

3.hours

3.hours.ago

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

同理,也可以写成

10.days

10.days.ago

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

这种风格,到底好不好,要看情况。比较方便定义内部DSL的语言, 我自己知道的有C++, Ruby, Lisp。现在多了Swift。

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

有些人学得特别快,因为之前的基础好。语言的语法只是表面,表面的东西总是变动得比较快的。底下的东西重要得多,而看不见。水面一块冰,有些人是冰山露出一角,有些人是无根的浮冰。看起来差不多,其实差别十分之大。

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

【提提那个Playground】

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

【现阶段,我自己的做法】

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

相关推荐
热点推荐
23年皇马生涯结束!罗马诺:预计纳乔6月离队,国米对他有意

23年皇马生涯结束!罗马诺:预计纳乔6月离队,国米对他有意

懂球帝
2024-04-20 01:47:15
“小侄子造的句,嫂子看完浑身是气,大哥愣是外出6天没敢回家!”哈哈哈~

“小侄子造的句,嫂子看完浑身是气,大哥愣是外出6天没敢回家!”哈哈哈~

水泥土的搞笑
2024-04-19 07:25:09
韩国教授直言:全世界只有韩国瞧不起中国,中国却已看不到韩国

韩国教授直言:全世界只有韩国瞧不起中国,中国却已看不到韩国

大头乖啊i
2024-04-19 14:38:28
日系掀桌子 东风日产官宣降价促销:6.98万轩逸开回家

日系掀桌子 东风日产官宣降价促销:6.98万轩逸开回家

户外小阿隋
2024-04-19 15:19:45
1分险胜,19分狂胜!西部豪门逆天改命,悄悄成为总冠军大热门

1分险胜,19分狂胜!西部豪门逆天改命,悄悄成为总冠军大热门

世界体育圈
2024-04-20 15:50:47
170万人的县城,跑出60家IPO

170万人的县城,跑出60家IPO

财经三分钟pro
2024-04-19 17:29:12
软件巨头SAP被曝上海裁员千人?员工称远没有这么多!

软件巨头SAP被曝上海裁员千人?员工称远没有这么多!

闲醉山人
2024-04-19 22:46:22
北京小学生的周末,诠释了什么才是差距,网友:拿什么跟人家比

北京小学生的周末,诠释了什么才是差距,网友:拿什么跟人家比

风起云间
2024-04-19 22:31:04
特雷杨暗示可能离开老鹰?最新下家赔率出炉:湖人居首马刺第三

特雷杨暗示可能离开老鹰?最新下家赔率出炉:湖人居首马刺第三

罗说NBA
2024-04-20 06:21:44
美国封杀南大门!墨西哥暂停中国汽车合作,产能过剩成新威慑

美国封杀南大门!墨西哥暂停中国汽车合作,产能过剩成新威慑

资本百科
2024-04-19 17:47:32
现在买房地产股票,就像当初买农业银行一样,才两年就快翻倍了

现在买房地产股票,就像当初买农业银行一样,才两年就快翻倍了

说故事的阿袭
2024-04-20 18:04:09
广东韶关今年第二场洪峰即将过境

广东韶关今年第二场洪峰即将过境

界面新闻
2024-04-20 18:46:04
黄奕带女儿爬长城,8岁夸张肤色被吐槽,妈妈打扮时髦女儿像村姑

黄奕带女儿爬长城,8岁夸张肤色被吐槽,妈妈打扮时髦女儿像村姑

创作者_1660054629785
2024-04-20 10:43:15
华为谜之操作,5499元起售的华为Pura 70竟不支持星闪功能

华为谜之操作,5499元起售的华为Pura 70竟不支持星闪功能

热点科技
2024-04-19 16:54:14
1979年,贺子珍终于来到北京,与毛主席留下了最后一张“合影”

1979年,贺子珍终于来到北京,与毛主席留下了最后一张“合影”

史诗长歌
2023-12-14 07:05:03
莫迪告诉14亿印度人,不仅要和中国平起平坐,更要让印度取而代之

莫迪告诉14亿印度人,不仅要和中国平起平坐,更要让印度取而代之

娱乐督察中
2024-04-19 14:58:02
“乱港头目”陈方安生:曾是香港二号人物,搞乱香港后成过街老鼠

“乱港头目”陈方安生:曾是香港二号人物,搞乱香港后成过街老鼠

清欢渡语
2024-04-16 21:45:50
120万人围观一张珍藏20年的卫生纸,评论炸了:太有共鸣

120万人围观一张珍藏20年的卫生纸,评论炸了:太有共鸣

雪莉故事汇
2024-04-20 13:00:41
四川女区长被男友抽打致死,生前哀求:别打了,我再也不敢了

四川女区长被男友抽打致死,生前哀求:别打了,我再也不敢了

安妮Emotiong
2024-04-11 20:29:27
研究发现:女人同意和你去这五个地方,就是已经答应和你越界了

研究发现:女人同意和你去这五个地方,就是已经答应和你越界了

寄予的情话
2024-04-20 11:22:25
2024-04-20 19:18:44

头条要闻

南方多地遭遇极端降水天气 广西百色下冰雹"大如鸡蛋"

头条要闻

南方多地遭遇极端降水天气 广西百色下冰雹"大如鸡蛋"

体育要闻

克莱,愿赌服输

娱乐要闻

北影节开幕之夜,内娱女星千娇百媚

财经要闻

新华资管香港的秘密:猛投地产或致巨亏

科技要闻

华为今年最关键的事曝光!Pura 70有新消息

汽车要闻

78.9万的极氪009光辉 让加价MPV无话可说

态度原创

游戏
健康
手机
公开课
军事航空

《绝地潜兵2》一周消灭20亿虫子任务仅用12小时完成

这2种水果可降低高血压死亡风险

手机要闻

苹果第三方应用商城方案遭开发者吐槽:过于复杂、体验糟糕

公开课

睡前进食会让你发胖吗?

军事要闻

伊朗总统发声 未提及伊斯法罕爆炸声

无障碍浏览 进入关怀版