Новый вариант sealed-класса оплаты тихо попал в default-ветку на iOS
sealed class PaymentResult {
data class Success(val receiptId: String) : PaymentResult()
data class Declined(val reason: String) : PaymentResult()
data object Pending : PaymentResult() // добавили в релизе
}
На Android компилятор сразу указал на неполный when. В Swift обработка выглядела так: if let s = result as? PaymentResultSuccess {...} else if let d = ... {...} else { showError() }. Статус Pending показывался пользователям как ошибка. Почему Swift не предупредил и что сделать?
- В Swift это классы; SKIE даст исчерпывающий switch
- Swift видит sealed-класс как enum с default
- Нужно пометить класс аннотацией @ObjCName
- Нужно заменить data object на object
