1. ホーム
  2. ios

[解決済み] NSSession dataTaskWithRequest 完了ハンドラーが、エラーパラメーターに暗黙的にラップされていないオプショナルを使用するのはなぜですか?

2022-03-06 23:21:08

質問

私はSwiftの初心者なのですが、戸惑うことがありました。 によると のドキュメントでは、NSSession の場合、dataTaskWithRequestメソッドのシグネチャは以下のようになります。

func dataTaskWithRequest(_ request: NSURLRequest,
   completionHandler completionHandler: ((NSData!,
                              NSURLResponse!,
                              NSError!) -> Void)?) -> NSURLSessionDataTask

completionHandler の NSError パラメータは、nil でも全く問題ないのに、なぜ暗黙のうちにアンラップされたオプションになるのでしょうか? 私は、それがNSError? オプションとして宣言されることを期待していました。 何か見逃しているものがあるのでしょうか?

解決方法は?

現在、iOS SDKには、この種の不整合が軒並み多く存在します。

現在、Swiftへの移行期間中で流動的な状態です。

これらのAPIはすべてObjective Cで書かれていることを思い出してください。 他にもNSURLなど、思い当たる例はたくさんあります。

しかし、ObjCからSwiftへの自動変換は、あなたが提供した上記の例のようないくつかの癖を残しています。

Apple は各クラスを見直し、Optionals に対するベストプラクティスのアプローチなど、API を近代化するための適切な変更を行っていますが、まだ完成していません。