我不在乎明年是否要重新编译我的应用程序,因为苹果公司再次改变了Swift语言。
然而,我关心的是,如果我的应用程序已经在应用程序商店中,停止工作并在应用程序上崩溃,在加载期间启动,因为用户更新到下一个iOS版本。我来自一个客观的C背景,但我不明白Swift应用程序在二进制级别上发生了什么。
在我正在编写的应用程序中,我添加了一个函数,允许我添加两个CGPoint值。这样做是有意义的,例如,当您使用pan手势识别器时。守则是:
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
发布于 2018-08-23 13:24:29
如果苹果在未来决定为CGPoint添加一个+功能,它会破坏我的应用程序吗?
不是的。首先。Swift系统框架的覆盖目前随您的应用程序一起提供。如果/当这种情况在ABI稳定后的未来发生变化时,除非重新编译,否则现有的应用程序不会受到影响。
第二,重载解析发生在编译时。也就是说,编译器选择要调用的具体函数,任何动态链接都不会改变它。
如果将CGPoint与包含+操作符的现有协议(如BinaryInteger )保持一致,情况就会有所不同,因为可以动态地分派协议需求。(让CGPoint与BinaryInteger保持一致可能是没有意义的,但请原谅我的争论。)
在这种情况下,苹果公司在未来版本中加入的一个冲突的一致性可能会导致冲突。
在Swift论坛上有一个关于Swift应该如何处理最后一个问题的讨论:追溯式Conformances OS.Swift in the OS。
https://stackoverflow.com/questions/51986203
复制相似问题