iOS Share Extensionのコンテキストで、私は次の2行を見つけました: "古い"コード(古いものではありませんが、開発者がいなくなってコードを文書化してレビューしています)を見ていました。強制的なキャストは共有拡張をクラッシュさせますか?
let content = self.extensionContext!.inputItems[0] as! NSExtensionItem
for attachment in content.attachments as! [NSItemProvider] {
最初の行:私は(私は正確にどのように、多分知らないドキュメントを赤とinputItems
があまりにも空にすることができたので、私はこの事が起こる必要がある場合は強制キャストはアプリがクラッシュすることを想定出来た)。
2行目:上記と同じですが、最初の行にクラッシュがない場合は、別の行が存在しない可能性があります。
質問1:ループの前にinputItems
の長さを確認するのは良い考えですか?
質問2:私は、このコードに少し編集をしたし、私はこれに最初の行を変更:
let content = self.extensionContext!.inputItems[0] as? NSExtensionItem
そうした後、XCodeのは、私はあまり好きではない二行目に修正を提案します(私はそれが可読ではないと考えています):
for attachment in (content?.attachments as? [NSItemProvider])!
は、XCodeの提案方法ですか?
コメントありがとうございます。ありがとう!
Ok。私は2行目をよく理解していません。内容です。添付ファイルはNSItemProviderであることが保証されています(いつもあります) –
docs:_(添付ファイル)画像、動画、URLなどが含まれています。これは代替のデータフォーマットやタイプの配列ではなく、ソーシャルメディアの投稿などに含めるコレクションです。これらの項目は常に入力されます。NSItemProvider_ –
更新された回答を参照してください。このコードは、データにアクセスする前にすべてのオプションを安全にアンラップします。値がnilの場合、関数は実行から復帰します。 – Laffen