Вступить в клуб →
сложнаявопросKotlin Multiplatform: общий код для Android и iOS

Новый вариант 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

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела