一起聊聊 Swift 3.0
Swift3.0将会给我们带来哪些改变:
1. 稳定二进制接口(ABI)
ABI是什么呢?API大家都知道是应用程序接口 API只是提供函数签名
而ABI是系统和语言层面的 如果ABI稳定 意味着以后Swift版本更新升级 我们不需要再修改老版本 Swift 语言编译的库了
如果你曾经从Swift 1.x 升级到 Swift 2.x 将会体会颇深
2. 弹性/韧性 解决易碎二进制接口问题
Fragile binary interface problem是面向对象编程语言的通病 如果在程序中引入了外部库 我们的的程序中使用并继承了该外部库中的类 如果外部库有改动 我们必须重新编译所有该类的继承树 而这类问题被称为脆弱的基类 (Fragile base class)
3. 可移植性
Swift可被移植到其他平台上
4. 全面支持泛型特性
Swift 2.2已经很好的支持泛型 但是还不够完善
Swift 3.0开始 将全面支持泛型的所有特性
5. 聚焦和完善
尽管是一个相对年轻的语言,但是Swift的快速发展已经积累了一定的语言功能 Swift 3.0将会会删除或改善这些功能 从而提供更好的整体一致性
6. 新的API设计规范
Swift3.0 发布了新的语言设计规范 其中在Swift3.0中标准库和核心库将会遵循这个设计规范
设计规范地址:
https://swift.org/documentation/api-design-guidelines/
关于设计规范我将会单独写一篇博客 感兴趣的记得关注我的公众号(DevTipss)或简书
7. 即将删除 currying func(Swift柯里化(Currying)) 特性
在Swift3.0中 currying func 将会被移除 该提案在SE-0002被提出
提案给出的原因是 currying func 用途是有限的并且增加了语言实现的复杂度
8. 从函数参数中删除var关键字
原因是var与inout会产生歧义和混乱
func doSomethingWithVar(var i: Int) {
i = 2 // This will NOT have an effect on the caller's Int that was passed, but i can be modified locally
}
func doSomethingWithInout(inout i: Int) {
i = 2 // This will have an effect on the caller's Int that was passed.
}
doSomethingWithVar(x)
print(x) // 1
doSomethingWithInout(&x)
print(x) // 2
doSomethingWithVar和doSomethingWithInout都可以在函数内部给i变量赋值 但是doSomethingWithVar并不能真正修改 i 的值
doSomethingWithInout可以真正修改 i 的值
var就产生了歧义和误导
9. 删除 ++ 和 -- 操作符
推荐使用+= 和 -=操作符
10. 为autoreleasepool添加错误处理
旧版autoreleasepool处理错误方式:
func doWork() throws -> Result {
var result: Result? = nil
var error: ErrorProtocol? = nil
autoreleasepool {
do {
... actual computation which hopefully assigns to result but might not ...
} catch let e {
error = e
}
}
guard let result = result else {
throw error!
}
return result!
}
Swift3.0 autoreleasepool 处理错误方式
public func autoreleasepool<Result>(@noescape body: () throws -> Result) rethrows -> Result
func doWork() throws -> Result {
return try autoreleasepool
{
... actual computation which either returns or throws ...
}
}
11. 允许直接引用(Default, Private, Repeat)关键字成员
enum UITableViewCellStyle : Int {
case \`default\`
case value1
case value2
case subtitle
}
enum SCNParticleImageSequenceAnimationMode : Int {
case \ `repeat\`
case clamp
case autoReverse
}
在Swift3.0之前我们引用default和repeat成员时 需要这样写:
let cell = UITableViewCell(style: .`default`, reuseIdentifier: nil)
particleSystem.imageSequenceAnimationMode = SCNParticleImageSequenceAnimationMode.`repeat`
Swift3.0时 允许我们直接访问default repeat 关键字成员
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
particleSystem.imageSequenceAnimationMode = SCNParticleImageSequenceAnimationMode.repeat
12. 将声明式@noescape和@autoclosure 改为类型属性
func f(@noescape fn : () -> ()) {} // declaration attribute
//新的语法
func f(fn : @noescape () -> ()) {} // type attribute.
func f2(a : @autoclosure () -> ()) {} // type attribute.
13. 重命名 Debug 标示符
__FILE__ -> #file
__LINE__ -> #line
__COLUMN__ -> #column
__FUNCTION__ -> #function
__DSO_HANDLE__ -> #dsohandle
Debug 标示符重命名后将会与#available #selector 关键字统一风格
参考:https://github.com/apple/swift-evolution
原文链接:http://www.jianshu.com/p/6a9e9e790064
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2015-10-09 Swift语言Storyboard教程:第一部分
2015-10-09 Swift UI开发初探
2015-10-09 iPhone应用程序开发基础之一: IBOutlet与IBAction
2015-10-09 Swift实战-小QQ(第1章):QQ登录界面
2015-10-09 Swift实战-QQ在线音乐(AppleWatch版)
2015-10-09 iOS苹果官方Demo合集
2015-10-09 Android4.3 蓝牙BLE初步