|
| 1 | +## Data class |
| 2 | + |
| 3 | +| Статус | Ожидание | Реальность | |
| 4 | +| --------- | ----------------------------------------------------------- | ---------------------------------------------------------------------- | |
| 5 | +| :warning: | Data class-ы сохраняют свои свойства после перехода в Swift | Не все возможности data class-ов сохраняются / есть особенности с copy | |
| 6 | + |
| 7 | +### Пояснения |
| 8 | + |
| 9 | +Опишем обычный data class в Kotlin-е: |
| 10 | + |
| 11 | +```kotlin |
| 12 | +data class DataClassExample( |
| 13 | + val param1: String, |
| 14 | + val param2: Int, |
| 15 | + val param3: Boolean |
| 16 | +) |
| 17 | +``` |
| 18 | + |
| 19 | +#### Метод `copy` |
| 20 | + |
| 21 | +Метод `copy` переносится в Swift с названием `doCopy`, работает аналогично методу в Kotlin, но |
| 22 | +есть неудобство [с необходимостью указывать все аргументы функции](/docs/usual-workflow/Function%20with%20default%20arguments.md). |
| 23 | + |
| 24 | +#### Метод `equals` |
| 25 | + |
| 26 | +Сравнение двух экземпляров data class-а работает аналогично Kotlin-у, включая сравнение коллекций. |
| 27 | + |
| 28 | +#### Метод `toString` |
| 29 | + |
| 30 | +При использовании объекта data class-а в строчке вывод такой же, как в Kotlin: |
| 31 | + |
| 32 | +```swift |
| 33 | +let dc = DataClassExample(param1: "123", param2: 10, param3: true) |
| 34 | +print("dc = \(dc)") |
| 35 | +``` |
| 36 | + |
| 37 | +#### Destructuring |
| 38 | + |
| 39 | +Эта фича Kotlin-а не работает. Но функции `component1()`, `component2`, ... `componentN()` доступны, |
| 40 | +и при желании можно описать свой метод для деструктуризации: |
| 41 | + |
| 42 | +```swift |
| 43 | +extension DataClassExample { |
| 44 | + func destruct() -> (String, Int32, Bool) { |
| 45 | + return (component1(), component2(), component3()) |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +func example() { |
| 50 | + val (param1, param2, param3) = DataClassExample("", 100, true).destruct() |
| 51 | +} |
| 52 | +``` |
| 53 | + |
| 54 | +--- |
| 55 | +[Оглавление](/README.md) |
0 commit comments