问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我想问问iOS开发最好用什么语言,听说新出了个swift语言怎么样?

发布网友 发布时间:2022-05-21 04:05

我来回答

1个回答

热心网友 时间:2023-10-13 23:41

翻完iBooks书店上的The Swift Programming Language, 也下载了Xcode 6的beta版本来试验了一下。现在可以评价一下。如发现不对的地方,请在评论中指出,我斟酌后进行修正。
主要从技术的角度。而商业的角度,吸引开发者,共同维护苹果生态圈的繁荣等之类就不说了。
我不敢说swift学了有没有用,可不可以挣更多钱,但这门语言还是比较有意思的。swift骨子里面还是objc,但打扮过,比原来的模样漂亮。个人感觉,苹果还真的想用它取代objc呢。
------------------
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的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。来自:求助得到的回答
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为freebuds4i切歌怎么操作_华为freebuds4i怎么切歌 华为freebuds pro切歌方法_华为freebuds pro怎么切歌 华为耳机怎么切换下一曲 欧美电影,好像是宠物有一个世界,宠物会想办法跟主人的灵魂互换占据 ...的名字,欧洲中世纪,一个王子的继母把他的灵魂和狗的灵魂互换了... 问一部外国电影的名字 剧情记得不大清楚l了 是前几年的片子 灵魂互换的... HUAWEI 华为 AGS2-W09 10.1英寸平板电脑 (香槟金、64GB+4GB、WiFi版... 诛仙3百法和千法差距大吗 微信怎么解除应用授权登录 授权应用删除方法 微信怎么解除应用授权登录授权应用删除方法 ios 脚本语言怎么向正在运行的程序发送消息 ios上可以使用的脚本语言有哪些 朗朗口腔现在有没有春节优惠活动? 口腔门诊年终晚会主持人词和节目怎么连接. 方圆物流偷我的东西。 想知道: 南京市 方之圆物流 在铁心桥的哪个位置? 深圳市方之圆物流有限公司东莞分公司怎么样? 高考每科要考多少分总分才能够到600 高考成绩600分每科多少分 qq运动红包怎么提现 怎么取消 2017年四川省公务员考试公告最早会在几号出来呢?谢谢! QQ钱包如何取消提现 地铁一天的收入是多少 怎么才能使我的酒量大增? 怎么能使酒量变大 地铁的造价成本很高,要多久才能回收成本? 北京地铁亏损73亿,深圳地铁却能赚110亿,问题出在了哪里? 地铁到底赚钱还是亏钱? 甲状腺术后吃什么恢复快 甲状腺开刀后需哪些营养 怎样报考北京电影学院?在哪里报名?每年的几月份招生?是在北京那个电影学院里面考试吗? 我是一个六年级小学生,想上北京电影学院,应该怎么报名,应该知道什么?求专业人员解答~拜托了~我真的 报考北京电影学院的话需要怎么做? 考北京电影学院的艺考怎样报名,是自己报名还是老师帮忙? 怎样打印北京电影学院报名表 北京电影学院进修班怎么报名?有没有老师的联系方式,别提官网,查不到 诱虾入笼配方 梦见鸡蛋破了,里面有一只白毛龙虾,什么意思? 幻塔龙什么意思 小时候经常头晕不能转圈圈,长大后对高蛋白龙虾螃蟹高度过敏。。。这是什么原因? 目前到底有几种途径可以买车险的啊? 车险最便宜的购买渠道 怎么传照片到app上,求解 江南水乡,美丽乡村,苏州昆山市淀山湖填六如墩村美丽景色 在南京公司法人变更代办有哪些好处 南京市江宁区工商局如何办理有限责任公司法人变更? 傅佩荣 都有哪些好书 都推荐一下吧! 眼睛模糊视力下降有黄斑 我想看几本有深度的书,能提高人的内涵,以及知识和修养的,大家推荐下。 求教:哪位朋友能推荐几本关于抚平人心灵和教做人的文学作品?