次のようなコードを使用するときに、強制的なアンラップ (Swift) を削除できるかどうか疑問に思っていました。
var currentProductRequest : SKProductsRequest?
public func requestProducts() -> Bool {
currentProductRequest = SKProductsRequest(productIdentifiers: Set<String>(identifiers))
currentProductRequest!.delegate = self
currentProductRequest!.start()
}
この場合、 currentProductRequest は 100% nil ではありません。ただし、これはオプションであり、上記のコンテキストでは、コンパイラはそれが nil ではないことを認識せず、強制的にアンラップする必要があります。SKProductsRequest を初期化しても nil が生成されないため、使用できません
if let request = SKProductsRequest(productIdentifiers: Set<String>(identifiers)) {
....
}
私が知っている 1 つの方法は、currentProductRequest の宣言を var currentProductRequest : SKProductsRequest! のように暗黙的にアンラップすることです。ただし、コンパイラは currentProductRequest が nil になることはないと考えますが、そうではない可能性があります。
強制的なアンラップが問題を引き起こすことはないことはわかっていますが (この場合)、私には醜いように思えます。currentProductRequest が nil ではないことをコンパイラに知らせて、強制的なアンラップを削除する方法があるかどうかは誰にもわかりません。