

iSwift是一款可以将苹果原开发语言Objective-C转换为最新的Swift开发语言的工具,你可直接把代码文件拖入iSwift图标上进行快速转换,并在左右两个区域显示两种语言,如果你有之前使用 Objective-C 开发的 Mac 软件或 iOS 应用,不妨使用 iSwift 来将自己的作品重构一下吧!
swift 跟 objc 共用同一套的运行时环境
swift 的类型,可以桥接到 objc 的类型,反之亦然。如 string 对应原来objc的NSString, closures对应objc的block,等等。objc 积累下来的大量库,实现不用改写,swift 就直接可以使用。(最多加个声明文件)。看两个API的声明,对比一下
objc
voiddispatch_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, 绝不是玩玩而已。
版本1.3新功能:
递增/递减运算符不正确翻译(问题# 14)
添加更多的类型:cgfloat,cgsize,CGRect,cgpoint,cgvector(问题# 6)
固定的问题与#导入指令和使用类型(知道问题# 5)
# pragma指令不被认可的(问题# 15)
类继承不转换(问题# 9)
类的扩展不被认可的(问题# 7)
附加偏好面板
喜好:添加选项来启用/禁用确认对话框关闭/打开文件(问题# 3)
喜好:添加选项来启用/禁用活你类型转换(相关:# 16)
上的拖放编辑工作(主要问题# 17)
禁用视图拖放迅速(问题# 18)
实例变量不认可(问题# 8)
备案号:
开发者其他应用

Dataflare数据库管理14.8M0人在玩Dataflare数据库管理是一款数据库的管理的工具,能够让你自己来管理自己的数据,通过这款Dataflare数据库管理来更好的统筹自身的数据内容,对于需要的个人来说值
下载
Notepad--代码编辑器Mac版18.0M31人在玩Notepad--代码编辑器Mac版是一个使用C++编写的文本编辑器Notepad安装包,会关联右键菜单。目标是要替换Notepad++,而国产软件开发者“爬山虎”便为此制作发布了N
下载
MassCode代码片段管理127.3M3人在玩MassCode代码片段管理是一款代码片段管理的软件,在工作当中所存在的代码内容都可以尝试使用这款MassCode代码片段管理来进行管理,将一些代码内容进行珍藏,对于
下载
DocKit Mac版195.9M0人在玩DocKitMac版是一款数据库的工具,通过这款DocKitMac版来完成数据上面的实时显示,对于编程人员来说通过这款DocKitMac版能够实时的显示相关的内容,需要的话不要错
下载
Chat2DB(AIGC数据库)212.7M5人在玩Chat2DB(AIGC数据库)是一款数据库的工具,开源并且免费的数据库的工具,并且在其中结合了AI的功能,让你的数据在处理各种数据之时更为的轻松,方便个人能够完成数
下载
SmartGit(Git客户端)76.6M115人在玩SmartGit是Mac上面较为知名的Git的客户端,在客户端上面方便用户处理GitHub上面的内容,包括创建自己的项目并且对项目当中的内容进行编辑,通过软件直接的进行处
下载
DevHub(开发者工具箱)100M1人在玩DevHub(开发者工具箱)是一款专为开发者所打造的工具箱,上面有着多种工具的内容,让开发者能够更为轻松的完成开发,对于日常当中的开发来说有着很大的帮助,如果
下载
腾讯UGit for Mac平台客户端196.2M1人在玩腾讯UGitforMac平台客户端是一款代码研发管理解决方案管理工具,软件能够进行文件级别的锁定操作,让特定场景的串行研发需求成为可能。非常适合腾讯有关深度合作
下载
ServBay(web开发环境部署工具)7.4M1人在玩ServBay(web开发环境部署工具)是一款一键进行开发环境部署的工具,能够通过这款ServBay来完成对于开发环境的部署,让前端开发者在Mac上面也能够轻松的部署并且完
下载
tiny rdm(Redis客户端Mac版)5.4M4人在玩tinyrdm作为一款跨平台的桌面客户端能够非常好的进行数据上面的处理,通过这款tinyrdm来处理你所需要的数据内容,让你服务器上面的数据能够更好的在上面得到一个
下载