gpt4 book ai didi

ios - Swift 4.1 ABI 向前兼容性 : implement function that Apple will implement in the future

转载 作者:可可西里 更新时间:2023-11-01 00:38:58 25 4
gpt4 key购买 nike

我不在乎明年是否必须重新编译我的应用程序,因为 Apple 再次更改了 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 更新后突然中断。)

系统:macOS 10.13.6,Xcode 9.4,Swift 4.1,部署目标 iOS 9.0

最佳答案

if Apple decides in the future that they add a + function for CGPoint too, does it break my app?

没有。首先。系统框架的 Swift 覆盖层目前随您的应用程序一起提供。即使在 ABI 稳定之后,如果/当 future 发生变化时,除非重新编译现有应用,否则它们不会受到影响。

其次,重载决策发生在编译时。 IE。编译器选择要调用的具体函数,没有动态链接会改变它。


如果您使 CGPoint 符合现有协议(protocol),例如 BinaryInteger,在其要求中包含 + 运算符,情况会有所不同,因为协议(protocol)要求可以动态调度。 (使 CGPoint 符合 BinaryInteger 可能没有意义,但为了论证,请耐心等待。)

在这种情况下,Apple 在未来版本中添加的冲突一致性可能会导致冲突。

Swift 论坛上正在进行关于 Swift 应如何处理最后一个问题的讨论:Retroactive Conformances vs. Swift-in-the-OS .

关于ios - Swift 4.1 ABI 向前兼容性 : implement function that Apple will implement in the future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com