Tehnografi.com - ВСхнологичСскиС новости, ΠΎΠ±Π·ΠΎΡ€Ρ‹ ΠΈ совСты

Π Π°Π±ΠΎΡ‚Π° со списком Π² SwiftUI

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ: Π Π°Π±ΠΎΡ‚Π° со списком Π² SwiftUI

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Π±Π»ΠΎΠ³

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ списка Π² SwiftUI ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ строки Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ столбцС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ список Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ обсудим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прСдставлСниС списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SwiftUI.

Π’ΠΎΡ‚ Π²ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Π½ΠΈΠΊΠ½Π΅ΠΌ:

  • Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ List ΠΈ ForEach для создания динамичСских ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов Π½Π° основС списков
  • Π’Π°ΠΆΠ½Ρ‹Π΅ аспСкты списка, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ Π΅Π³ΠΎ источник Π΄Π°Π½Π½Ρ‹Ρ….
  • ИспользованиС List Π² сочСтании с ForEach для создания Π±ΠΎΠ»Π΅Π΅ качСствСнных списков
  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ForEach ΠΈ onDelete()
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСкционированного списка с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ForEach ΠΈ Π Π°Π·Π΄Π΅Π»

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° прСдставлСниС списка Π² SwiftUI. Бамая базовая настройка списка Π½Π° самом Π΄Π΅Π»Π΅ довольно проста.

List(movies, id: \.id) { Ρ„ΠΈΠ»ΡŒΠΌ Π²
ВСкст(Ρ„ΠΈΠ»ΡŒΠΌ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Movie, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ прСдставлСниС списка с тСкстовыми элСмСнтами для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΠΌΠ° Π² массивС.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с массивом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Movie. Π’ΠΎΡ‚ ΠΊΠΎΠ΄ структуры Movie:

struct Movie: ΠžΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌΡ‹ΠΉ {
Π²Π°Ρ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = UUID()
Π²Π°Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:Π‘Ρ‚Ρ€ΠΎΠΊΠ°
}
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Movie соотвСтствуСт ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Identificable. Π›ΡŽΠ±ΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Identifying, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свойство id, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обСспСчиваСт Β«ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽΒ» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. По сути это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ свойство id Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ UUID, Π½ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, цСлочислСнный индСксный ΠΊΠ»ΡŽΡ‡ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Movie, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основано прСдставлСниС списка:

@State var Ρ„ΠΈΠ»ΡŒΠΌΡ‹ = [
Movie(title: β€œEpisode IV – A New Hope”),
Movie(title: β€œEpisode V – The Empire Strikes Back”),
Movie(title: β€œEpisode VI – Return of the Jedi”),

]
Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ использовали для прСдставлСния списка:

List(movies, id: \.id) { Ρ„ΠΈΠ»ΡŒΠΌ Π²
ВСкст(Ρ„ΠΈΠ»ΡŒΠΌ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ прСдставлСния списка ΠΈΠΌΠ΅Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

  1. Π”Π°Π½Π½Ρ‹Π΅ бСзымянного ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π² прСдставлСнии списка. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся массив Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ².
  2. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ свойство Movie, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² массивС Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ². (ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ id здСсь являСтся ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: id ΠΈ Identifying.)
  3. Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° rowContent; содСрТимоС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… строк списка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это послСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис замыкания.

ПослСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсным. Π­Ρ‚ΠΎ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдоставляСт содСрТимоС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² спискС. Подобно ΠΊΠ°Ρ€Ρ‚Π΅(_:), ΠΎΠ½Π° вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² Ρ„ΠΈΠ»ΡŒΠΌΠ°Ρ… ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ прСдставлСниС для отобраТСния. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ тСкстовоС прСдставлСниС. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ прСдоставлСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΠΈΠ»ΡŒΠΌΠ°.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствия, описанныС Π² этом руководствС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Xcode. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ шаблон прилоТСния, SwiftUI для интСрфСйса ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ SwiftUI для ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с прСдставлСниСм ContentView ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своС собствСнноС. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² структурС прилоТСния!

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ «Бписок» ΠΏΠΎ сути являСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для подпрСдставлСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ. Он ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ прСдставлСния, ΠΊΠ°ΠΊ VStack ΠΈ HStack, Π° Ρ‚Π°ΠΊΠΆΠ΅ UITableViewController для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС раскадровки.

ЀактичСски, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простоС статичСскоС прСдставлСниС списка ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… подпрСдставлСний:

Бписок {
ВСкст («Братство ΠšΠΎΠ»ΡŒΡ†Π°Β»)
ВСкст (Β«Π”Π²Π΅ башни»)
ВСкст (Β«Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ короля»)
}

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ List особСнным, Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ динамичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ подпрСдставлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ нСбольшой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт подпрСдставлСния для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов. А Π² SwiftUI Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ List с ForEach, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ большС.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Бписок {
ForEach(movies, id: \.id) {Ρ„ΠΈΠ»ΡŒΠΌ Π²
ВСкст(Ρ„ΠΈΠ»ΡŒΠΌ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}
}

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для List ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΈΡ… Π² структуру ForEach.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ForEach вычисляСт прСдставлСния ΠΏΠΎ запросу ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π» List. Π­Ρ‚ΠΈ прСдставлСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ подпрСдставлСниями List, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ использовании Ρ‚ΠΎΠ»ΡŒΠΊΠΎ List.

Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ прСимущСство использования ForEach? ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ForEach большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ поставщик Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ Π½Π° прСдставлСниС. ИспользованиС ForEach Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ доступ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ дСйствиям с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ onDelete(), onInsert() ΠΈ onMove(), Ρ‡Π΅Π³ΠΎ List Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ForEach ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ прСдставлСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько подпрСдставлСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ со стСками. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

HStack {
Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ([β€œFile”, β€œEdit”, β€œView”]id: \.hash) { Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π²
ВСкст (Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}
}

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ForEach с onDelete() для удалСния элСмСнтов ΠΈΠ· источника Π΄Π°Π½Π½Ρ‹Ρ…, Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² основС списка. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Бписок {
ForEach(movies, id: \.id) {Ρ„ΠΈΠ»ΡŒΠΌ Π²
ВСкст(Ρ„ΠΈΠ»ΡŒΠΌ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}
.onDelete { indexSet Π²
для индСкса в indexSet {
Ρ„ΠΈΠ»ΡŒΠΌΡ‹.ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ(ΠΏΠΎ адрСсу: index)
}
}
}

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ onDelete() вызываСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ элСмСнту списка Π²ΠΏΡ€Π°Π²ΠΎ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ удаляли элСмСнт Π² iOS. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, которая Ρ‚Π°ΠΊΠΆΠ΅ встроСна Π² повсСмСстноС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π² List ΠΎΠ½Π° Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ.

Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ состояниС. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ придСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ свойства @State ΠΊ свойству Movies.

@State var Ρ„ΠΈΠ»ΡŒΠΌΡ‹ =

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ зависит ΠΎΡ‚ состояния Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ элСмСнт ΠΈΠ· массива Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², прСдставлСниС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ обновится.

Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСдставлСниС для строк списка Π²Π½ΡƒΡ‚Ρ€ΠΈ списка. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° прСдставлСниС Π² спискС. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ List() { MovieRow() }.

Если List Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ нСсколько строк Π² спискС, Π° ForEach Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСдставлСния Π½Π° основС источника данных… это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° для создания сСкционированных списков. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ!

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ собираСмся внСсти нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Movie. Π’Π°ΠΊ:

struct Movie: ΠžΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌΡ‹ΠΉ {
Π²Π°Ρ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = UUID()
Π²Π°Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:Π‘Ρ‚Ρ€ΠΎΠΊΠ°
Π²Π°Ρ€ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄:ΠŸΠ΅Ρ€ΠΈΠΎΠ΄
}

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Movie Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ свойство period, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания сСкционированного списка. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρƒ Ρ„ΠΈΠ»ΡŒΠΌΠ° соотвСтствуСт свой Ρ€Π°Π·Π΄Π΅Π» списка.

Π’ΠΎΡ‚ пСрСчислСниС ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°:

ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ пСрСчислСния: String, CaseIterable {
case original = Β«ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ трилогия»
case prequel = «Врилогия ΠΏΡ€ΠΈΠΊΠ²Π΅Π»Π°Β»
ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π° = Β«ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€ΠΈΠ»ΠΎΠ³ΠΈΠΈΒ»
случай Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ = «Автономный»
}

Π’ пСрСчислСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ значСния, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Β«ΠŸΠ΅Ρ€ΠΈΠΎΠ΄Β» ΠΈ ΠΊΠ°ΠΊ строковыС значСния. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» CaseIterable позволяСт Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ пСрСчислСниС ΠΊΠ°ΠΊ массив Ρ‡Π΅Ρ€Π΅Π· свойство allCases.

Π”Π°Π»ΡŒΡˆΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π°ΠΌ понадобятся Ρ„ΠΈΠ»ΡŒΠΌΡ‹!

Π²Π°Ρ€ Ρ„ΠΈΠ»ΡŒΠΌΡ‹ = [
Movie(title: β€œEpisode IV – A New Hope”, period: .original),
Movie(title: β€œEpisode V – The Empire Strikes Back”, period: .original),
Movie(title: β€œEpisode VI – Return of the Jedi”, period: .original),

Movie(title: β€œStar Wars: The Clone Wars”, period: .standalone),
Movie(title: β€œRogue One”, period: .standalone),
Movie(title: β€œSolo”, period: .standalone),
Movie(title: β€œThe Mandalorian”, period: .standalone)
]

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ этому Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ списку. Π’ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ:

Бписок {
ForEach(Period.allCases, id: \.rawValue) {ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²
Π Π°Π·Π΄Π΅Π» (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: ВСкст (ΠΏΠ΅Ρ€ΠΈΠΎΠ΄.rawValue)) {
ForEach(movies.filter { $0. period == period }) { Ρ„ΠΈΠ»ΡŒΠΌ Π²
Π’Π‘Ρ‚Π΅ΠΊ {
ВСкст(Ρ„ΠΈΠ»ΡŒΠΌ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
ВСкст(movie. period.rawValue)
}
}
}
}
}

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

  • Π‘ высоты ΠΏΡ‚ΠΈΡ‡ΡŒΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создали список с двумя Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ структурами ForEach. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Ρ„ΠΈΠ»ΡŒΠΌΡ‹ Π² Π½Π΅ΠΌ.
  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ForEach для Period.allCases Π±ΡƒΠ΄Π΅Ρ‚ цикличСски ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС случаи Period. Они ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚. Π΅. ΠΏΠΎ строкС. (Из-Π·Π° отсутствия Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ это Π½Π΅ сработаСт для ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ строк!)
  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«Π Π°Π·Π΄Π΅Π»Β» обСспСчиваСт Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСкстовоС прСдставлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Ρ‚ΠΎΡ‡ΠΊΡƒ Π² качСствС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ эти Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая пСрСчислСния Period.
  • Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΌΡ‹ создаСм Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ структуру ForEach. Π’ качСствС источника Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Movies.filter { }, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ элСмСнты ΠΈΠ· Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ совпадаСт с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°.
  • НаконСц, Π½Π° самом Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ создаСм Π΄Π²Π° простых тСкстовых прСдставлСния для отобраТСния названия Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΈ относятся. Аккуратный!

На этом этапС Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ SwiftUI β€” это Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов. На самом Π΄Π΅Π»Π΅ ΠΌΡ‹ просто описываСм ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈ структуру ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½, ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… SwiftUI Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс. SwiftUI позаботится ΠΎΠ±ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ динамичСскиС конструкции, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ForEach, прСдставлСния фиксированы ΠΈ статичны Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ измСнятся. Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ успСхом ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ всС эти Ρ„ΠΈΠ»ΡŒΠΌΡ‹, Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈ стСки Π² ΠΎΠ΄Π½Ρƒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΊΠΎΠ΄Π°. ForEach ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для нас, программистов, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ мСньшС ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ большС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ. ΠŸΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠΉ!

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ обсудили, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ List ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для создания ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ строк/столбцов Π² SwiftUI. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ:

  • Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ List для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов
  • ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ источника Π΄Π°Π½Π½Ρ‹Ρ… списка Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ
  • ИспользованиС списка вмСстС с ForEach
  • Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· списка ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ @State
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСкционированного списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ForEach