Мне было интересно, можно ли удалить принудительное развертывание (Swift) при использовании такого кода:
var currentProductRequest : SKProductsRequest?
public func requestProducts() -> Bool {
currentProductRequest = SKProductsRequest(productIdentifiers: Set<String>(identifiers))
currentProductRequest!.delegate = self
currentProductRequest!.start()
}
В этом случае currentProductRequest будет 100% не равным нулю; однако это необязательно, и в приведенном выше контексте компилятор не знает, что он не будет равен нулю, и ему необходимо принудительно развернуть. Поскольку инициализация SKProductsRequest никогда не приведет к нулю, я не могу использовать
if let request = SKProductsRequest(productIdentifiers: Set<String>(identifiers)) {
....
}
Один из известных мне способов - сделать объявление currentProductRequest неявно развернутым, например var currentProductRequest: SKProductsRequest !. Однако это заставит компилятор думать, что currentProductRequest никогда не будет равен нулю, что может быть не так.
Я знаю, что принудительное развертывание никогда не вызовет проблем (в данном случае), но мне это кажется некрасивым. Кто-нибудь знает, есть ли способ сообщить компилятору, что currentProductRequest не будет равен нулю и, таким образом, удалит принудительное развертывание.