Skip to content

Latest commit

 

History

History
48 lines (35 loc) · 2.66 KB

Suspend functions.md

File metadata and controls

48 lines (35 loc) · 2.66 KB

Suspend functions

Статус Ожидание Реальность
Suspend-функции развернулись в удобную для Swift-конструкцию Транслируется в callback, экспериментально - в async / await. Но для использования в реактивных фреймворках требуются дополнительный bridge-код

Пояснения

Опишем класс, использующий suspend-функции Kotlin-а:

data class Thing(val item: Int)

class ThingRepository {

    suspend fun getThing(succeed: Boolean): Thing {
        delay(100)
        if (succeed) {
            return Thing(0)
        } else {
            error("oh no!")
        }
    }

}

На стороне Swift-а suspend-функция превращается в completion handler.

// suspend function
ThingRepository().getThing(succeed: true, completionHandler: { thing, error in
    // do something
})

С Kotlin 1.5.30 появилась экспериментальная возможность мапить suspend-функции в вид async/await. Но, вероятно, iOS-команда не будет использовать эту фичу в ближайшее время, потому что она будет нормально доступна только с iOS 15.

Про маппинг suspend-функций для реактивных фреймворков можно почитать серию статей:


Оглавление