我不在乎明年是否要重新编译我的应用程序,因为苹果再次更改了Swift语言。
但是,我要关心的是,由于用户已更新到下一个iOS版本,因此我的一个应用程序已经在应用程序商店中停止运行,并且在加载期间崩溃。我来自Objective C背景,但我不了解二进制级别的Swift应用程序中正在发生什么。
在我正在编写的应用程序中,我添加了一个函数,该函数允许我添加两个CGPoint
值。这样做是有道理的,例如使用pan gesture recognizers时。代码是:
func +(_ a: CGPoint, _ b: CGPoint) -> CGPoint {
return CGPoint(x: a.x+b.x, y: a.y+b.y)
}
问题是:如果Apple将来决定也为+
添加CGPoint
函数,是否会破坏我的应用程序? (我不在乎是否必须删除此功能并重新编译,我只在乎是否已部署的应用程序在iOS更新后突然中断。)
系统:具有Xcode 9.4,Swift 4.1,部署目标iOS 9.0的macOS 10.13.6
答案 0 :(得分:4)
如果苹果将来决定他们也为CGPoint添加+功能,是否会破坏我的应用程序?
不。首先。应用程序当前随附了用于系统框架的Swift叠加层。如果/以后在ABI稳定后会发生变化,则除非重新编译现有应用,否则它们不会受到影响。
第二,重载解析发生在编译时。即编译器选择要调用的具体函数,并且没有动态链接会对其进行更改。
如果您使CGPoint
符合诸如BinaryInteger
之类的现有协议(其要求中包含+
运算符),则情况会有所不同,因为协议要求可以动态分派。 (让CGPoint
到BinaryInteger
可能没有意义,但是为了争论,请忍受。)
在这种情况下,将来版本中添加的与Apple的一致性冲突可能会导致冲突。
Swift论坛上正在进行有关Swift应该如何处理最后一个问题Retroactive Conformances vs. Swift-in-the-OS的讨论。