首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFT4.1 ABI前向兼容性:苹果未来将实现的功能

SWIFT4.1 ABI前向兼容性:苹果未来将实现的功能
EN

Stack Overflow用户
提问于 2018-08-23 12:47:18
回答 1查看 124关注 0票数 2

我不在乎明年是否要重新编译我的应用程序,因为苹果公司再次改变了Swift语言。

然而,我关心的是,如果我的应用程序已经在应用程序商店中,停止工作并在应用程序上崩溃,在加载期间启动,因为用户更新到下一个iOS版本。我来自一个客观的C背景,但我不明白Swift应用程序在二进制级别上发生了什么。

在我正在编写的应用程序中,我添加了一个函数,允许我添加两个CGPoint值。这样做是有意义的,例如,当您使用pan手势识别器时。守则是:

代码语言:javascript
复制
func +(_ a: CGPoint, _ b: CGPoint) -> CGPoint {
    return CGPoint(x: a.x+b.x, y: a.y+b.y)
}

问题是:如果苹果未来也决定为CGPoint添加一个CGPoint功能,它会破坏我的应用程序吗?(我不在乎是否要删除这个函数并重新编译,我只关心已经部署的应用程序在iOS更新后突然中断。)

系统: macOS 10.13.6,Xcode 9.4,SWIFT4.1,部署目标iOS 9.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 13:24:29

如果苹果在未来决定为CGPoint添加一个+功能,它会破坏我的应用程序吗?

不是的。首先。Swift系统框架的覆盖目前随您的应用程序一起提供。如果/当这种情况在ABI稳定后的未来发生变化时,除非重新编译,否则现有的应用程序不会受到影响。

第二,重载解析发生在编译时。也就是说,编译器选择要调用的具体函数,任何动态链接都不会改变它。

如果将CGPoint与包含+操作符的现有协议(如BinaryInteger )保持一致,情况就会有所不同,因为可以动态地分派协议需求。(让CGPointBinaryInteger保持一致可能是没有意义的,但请原谅我的争论。)

在这种情况下,苹果公司在未来版本中加入的一个冲突的一致性可能会导致冲突。

在Swift论坛上有一个关于Swift应该如何处理最后一个问题的讨论:追溯式Conformances OS.Swift in the OS

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51986203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档