首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFT5.1不透明结果类型如何与旧操作系统(如iOS 12)交互

SWIFT5.1不透明结果类型如何与旧操作系统(如iOS 12)交互
EN

Stack Overflow用户
提问于 2019-06-09 21:12:51
回答 1查看 1.4K关注 0票数 3

在WWDC 2019 session 402 "斯威夫特有什么新鲜事“中,演讲者在讨论SWIFT5.1功能不透明结果类型(SE-0244)时提到,该功能只适用于新的OSes:

需要新的Swift运行时支持 macOS Catalina,iOS 13,tvOS 13,watchOS 6及更高版本 在部署到较早的OS版本时,备用保护系统使用带有可用性检查的

在Xcode 11中,如果我在针对iOS 11和更高版本时使用此特性编写代码,则不会收到任何构建错误(或警告)。我没有在if #available(iOS 13.0, *)检查中包装任何代码。例如:

代码语言:javascript
复制
protocol Shape { }
class Square: Shape { }
class Triangle: Shape { }
    
func foo() -> some Shape {
    return Square()
}

然后从我应用程序中的一些代码中调用foo()

如果这段代码运行在预iOS 13设备上,会发生什么?缺乏构建错误本身是一个错误吗?是否有一个明确的列表,哪些SWIFT5.1特性需要新的运行时支持,从而需要一个特定的OS版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-09 23:20:12

缺乏构建错误本身是一个错误吗?

是。它被清楚地记录下来。正如发布说明清楚地告诉您的:

带有some协议返回类型的声明需要iOS 13、macOS 10.15、watchOS 6或tvOS 13中的SWIFT5.1运行时,但是Swift编译器没有强制执行。在以前的操作系统版本上运行使用some返回类型的应用程序可能会在运行时崩溃.解决方案:只将使用some返回类型的二进制文件部署到iOS 13、macOS 10.15、watchOS 6和tvOS 13。

所以,照你说的去做:使用availability守卫或准备死亡。

编辑这个bug现在已经修复,这意味着some返回类型的可用性由编译器强制执行:

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

https://stackoverflow.com/questions/56518406

复制
相关文章

相似问题

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