gpt4 book ai didi

ios - 强制转换会使共享扩展崩溃吗?

转载 作者:行者123 更新时间:2023-11-28 15:37:23 25 4
gpt4 key购买 nike

我正在审查“旧”代码(不是那么旧,但是开发人员离开了,我们正在记录和审查他的代码),当时,在 iOS 共享扩展的上下文中,我发现了以下两行:

let content = self.extensionContext!.inputItems[0] as! NSExtensionItem
for attachment in content.attachments as! [NSItemProvider] {

第一行:我修改了文档,发现 inputItems 也可以是空的,所以我想如果发生这种情况,强制转换会使应用程序崩溃(我不确切地知道如何,但也许可以)。

第二行:和上面一样,不同的是如果你在第一行没有崩溃你可能不会在这里有另一个。

问题 1:在循环之前检查 inputItems 的长度是个好主意吗?

问题 2:我对这段代码做了一些修改,并将第一行更改为:

let content = self.extensionContext!.inputItems[0] as? NSExtensionItem

这样做之后,XCode 建议对我不太喜欢的第二行进行更正(我认为它不可读):

for attachment in (content?.attachments as? [NSItemProvider])!

XCode 建议是可行的方法吗?

任何意见表示赞赏。谢谢!

最佳答案

在访问对象本身之前解包可选值总是一个好主意。

在继续处理内容之前,您可以使用 guard 解包可选链。

guard let content = self.extensionContext?.inputItems.first as? NSExtensionItem else { return }
guard let attachments = content.attachments as? [NSItemProvider] else { return }

for attachment in attachments {
// Do stuff
}

资源:

Statements

Patterns

关于ios - 强制转换会使共享扩展崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44158624/

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