首页

文章

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

发布网友 发布时间:2022-03-04 04:54

我来回答

1个回答

热心网友 时间:2022-03-04 06:24

翻完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的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。来自:求助得到的回答
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 软柿子的热量 孕妇可以吃软柿子吗不是西红柿 脆柿子和软柿子的区别 脆柿子好还是软柿子好 软柿子可以多吃吗 “鱼悬洁白振清风”的出处是哪里 用大自然的声音评课好吗? 妇产科博士找超声科工作容易吗 怎能把微信6.2.0版本换回6.1.2版 微信群6.2.4怎么增加人数上限 微信6.2.2如何备份手机通讯录 电脑桌面图标不能放大? 有什么好用的识图软件 识图认人哪个软件最好 手机识图软件什么软件能识别图片位置 小米手机自动锁屏时间怎么修改 小米手机屏幕锁定时间设置教程 能举起100斤算大力吗 中医美容专业是什么 中医美容证有什么用 单声道音频什么意思(开启单声道音频有什么好处) 单声道音频是什么,有什么用处? 户口还未迁移到婆家 娘家户口怎么就没了呢 我结婚没有迁户口,现在娘家也没有怎么办 没领证生的孩子一般会判给谁 没领证生的孩子会判给谁 信用卡卡种有哪些 找一首古风歌曲 男声 低配电脑装w10还是w7流畅 电脑配置低装win7还是win10好 低配电脑适合装WIN7系统还是WIN10系统? ...500s-15isk这个联想笔记本的内存条尺寸是什么型号的有没有知道的... 越快越好.怎样减肥.而且胸部不缩水 请问徐闻县海安长途汽车客运站客服是多少? 过了平台期还会瘦吗 悦耳的意思悦耳的解释 重庆师范大学应用心理学专业的权威性如何? 打印机laserjetm1136mfp怎样设置无线打印 经典电影赏析之1:《精武英雄》 爆米花用的什么玉米 糯玉米哪个好 有机糯玉米的营养价值如何? 四大直辖市换帅原因 四大直辖市换帅为啥 华为Mate 10区域截屏操作方法? 我是做软件开发的,对一些个语言非常的了解,但是我想学习IOS课程,不知道都需要哪些方面的语言呢? 华为Mate 10手机滚动截屏如何设置呢? ios 开发是学swift语言好还是Objective-c语言好?求大神指点 华为mate10怎么滚动截屏 大家觉得ios编程用哪种语言好 华为Mate 10手机怎么样,手势截屏是什么 华为Mate 10怎么截屏 三种智能截屏方式图文 想学习开发ios,请问得先学什么语言? 华为Mate10怎么截图/截屏 Xcode学之前应该现学什么语言? 华为Mate 10怎么截屏 华为Mate 10截图方法大全 做了两年iOS开发,有多少必要性学习swift语言 学习iOS软件或游戏开发到底需要哪几种编程语言?我需要严谨的回答。 华为mate10怎么截图/截屏 iOS开发一定要学c语言吗? ios app 开发用什么语言最好 安卓和ios编程需要什么语言 ios app开发用的是什么语言 ios app 开发用什么语言 华为Mate 10指关节截图怎么用呢?有什么特殊的操作? 有没有人没有任何语言基础去学了ios开发的 可以分享一下吗 华为mate10指关节截图功能怎么样 请问学习安卓开发和IOS开发要先学什么语言作为基础啊? 华为手机Mate 10如何任意区域截屏 华为mate10怎样截视频 IOS开发证书 华为Mate 10截屏方法哪种好用 华为Mate 10怎么录屏 ?录屏有快捷键吗?? 移动开发 android ios 有什么资格认证考试的么 ios开发者证书和发布者证书需要什么手续和费用多少? IOS认证的区别? iOS 开发者开发证书和发布证书的区别以及更换的方法 ios 测试证书 开发证书 有什么用 ios百度云zip怎么解压 听说开发的IOS应用,如果有一个企业证书或者是差不多的东西,可以不在AppStore上发布, 百度云里的文件怎么解压?zip格式的! ios开发者账号认证有没有发票 百度云zip怎么解压 苹果开发者证书的购买者是公司吧?我正在学iOS开发需要购买开发者证书吗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com