我在查看“旧”代码(不是那么旧,但是一个开发人员离开了,我们正在记录和查看他的代码),这时,在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