ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ — SwiftBook
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ — ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Swift ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈ Π² C ΠΈ Objective-C, ΠΈ Π»ΡΠΌΠ±Π΄Ρ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π»ΡΠ±ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ. ΠΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΊΠ°ΠΊ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΎΡΡΡΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅». Swift Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅ Π·Π° Π²Π°Ρ.
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
ΠΠ΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ΠΌ «Π·Π°Ρ Π²Π°ΡΠ°»(capturing). ΠΡΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½ΠΈΠΆΠ΅ Π² Π³Π»Π°Π²Π΅ ΠΠ°Ρ Π²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π³Π»Π°Π²Π΅ Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ:
- ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
- ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΌΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½Π½ΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΈΡ ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Swift ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠΊΠΈΠΉ, ΡΡΠ½ΡΠΉ, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ . ΠΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠΈΠΏΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
- ΠΠ΅ΡΠ²Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ
- Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
- Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π³Π»Π°Π²Π΅ ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ²Π»ΡΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠ°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π² ΠΊΡΠ°ΡΠΊΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½ΠΈΠΆΠ΅, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:) ΠΏΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ , ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΆΠ°ΡΠΎΠΉ ΡΠΎΡΠΌΠ΅.
ΠΠ΅ΡΠΎΠ΄ sorted
Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Swift Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ sorted(by:), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΡΠ΅. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΌΠ΅ΡΠΎΠ΄ sorted(by:) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΠΉ, Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sorted(by:).
ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ sorted(by:)Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ· String Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:) ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Bool Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΎΡΡΠΌ, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ true, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· String Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Ρ ΡΠΈΠΏΠΎΠΌ (String, String) -> Bool.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:):
func backward(_ s1: String, _ s2: String) -> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames ΡΠ°Π²Π΅Π½ ["Ewa", "Daniella", "Chris", "Barry", "Alex"]
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° (s1) Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π²ΡΠΎΡΠ°Ρ ΡΡΡΠΎΠΊΠ° (s2), ΡΡΠ½ΠΊΡΠΈΡ backward(_:_:) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ s1 Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ s2 Π² ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠ»Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ°Ρ , «Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ» ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ «ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ΅ΠΌ». ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ Π±ΡΠΊΠ²Π° «B» «Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ» Π±ΡΠΊΠ²Π° «Π», Π° ΡΡΡΠΎΠΊΠ° «Tom» Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΡΡΡΠΎΠΊΠ° «Tim». ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, Ρ «Barry» ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ΅ΡΠ΅Π΄ «Alex», ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΊΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎ ΡΡΡΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (a > b). Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΠ±ΡΡΡ ΡΠΎΡΠΌΡ:
- { (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ) -> ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° in
- Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- }
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΒ ΡΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ. ΠΠ°ΡΠΈΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠΎΡΡΠ΅ΠΆΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΊΠ°ΠΊ ΡΠΈΠΏΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ backwards(_:_:) Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ:
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ backwards(_:_:). Π ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΎΠ½ΠΎ ΠΏΠΈΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ (s1: String, s2: String) -> Bool. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠΈΠ³ΡΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ, Π° Π½Π΅ Π²Π½Π΅ ΠΈΡ .
ΠΠ°ΡΠ°Π»ΠΎ ΡΠ΅Π»Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ in. ΠΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ΠΎ, ΠΈ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ Π²ΠΎΡ-Π²ΠΎΡ Π½Π°ΡΠ½Π΅ΡΡΡ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ:
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 })
ΠΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°Β sortedΒ ΠΎΡΡΠ°Π»ΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ. ΠΠ°ΡΠ° ΡΠΊΠΎΠ±ΠΎΠΊ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΠ±ΠΎΡΠΎΠ±Π»ΡΡΡ Π²Π΅ΡΡ Π½Π°Π±ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, Swift ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎΒ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ΅ΡΠ΅Π· ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:). ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠΈΠΏ (String, String) -> Bool. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ ΡΠΈΠΏΡ (String, String) ΠΈ Bool Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ, ΡΡΡΠ΅Π»ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ( -> ) ΠΈ ΡΠΊΠΎΠ±ΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½Ρ:
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 })
ΠΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅. Π Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Π ΡΠ»ΡΡΠ°Π΅ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sorted(by:), ΡΠ΅Π»Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΠΎΠ½ΡΡΠ½Π° ΠΈΠ· ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΈ ΠΎΠ½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ String, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΡΡΠΎΠΊ.
ΠΠ΅ΡΠ²Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΡΠΊΠ°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° return ΠΈΠ· ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 })
ΠΠ΄Π΅ΡΡ, ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:)Π΄Π°Π΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²Π΅ΡΠ½Π΅Ρ Bool Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄Π½ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (s1 > s2), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Bool Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ, ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ return ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ.
Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
Swift Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΈΠΌΠ΅Π½Π° $0, $1, $2, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ Π²Π°ΡΠΈΠΌ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΡΠΈΠΏ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ in ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΡΠ΅Π»Π°:
reversedNames = names.sorted(by: { $0 > $1 })
ΠΠ΄Π΅ΡΡ, $0 ΠΈ $1 ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΈ Π²ΡΠΎΡΠΎΠΌΡ String ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°ΡΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ΅. Π’ΠΈΠΏ String Π² Swift ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ( > ) ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ Π΄Π²Π° ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Bool. ΠΡΠΎ ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΏΡ ΠΌΠ΅ΡΠΎΠ΄Π°, Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° sorted(by:). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π±ΠΎΠ»ΡΡΠ΅, Π° Swift Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ:
reversedNames = names.sorted(by: >)
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠ°ΠΌΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅, ΡΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ — Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π½Π΅ (ΠΈ ΠΏΠΎΡΠ»Π΅) ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎΒ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠΎ Π²Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ»ΡΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
func someFunctionThatTakesAClosure(closure: () -> Void) {
// ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ
}
// ΠΠΎΡ ΠΊΠ°ΠΊ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ:
someFunctionThatTakesAClosure(closure: {
// ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ
})
// ΠΠΎΡ ΠΊΠ°ΠΊ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ:
someFunctionThatTakesAClosure() {
// ΡΠ΅Π»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ
}
Π‘ΠΎΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΒ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²Π½Π΅ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ sorted(by:), ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅:
reversedNames = names.sorted() { $0 > $1 }
ΠΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΡΡΠΈΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ.
reversedNames = names.sorted { $0 > $1 }
ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΌΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅, ΠΈ Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π²Π°ΠΌ ΠΌΠ΅ΡΠΎΠ΄ map(_:) ΡΠΈΠΏΠ° Array Π² ΡΠ·ΡΠΊΠ΅ Swift, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ°Π·Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°) Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠΈΡΠΎΠ΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ.
ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΌΠ΅ΡΠΎΠ΄ map(_:) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΠΎΡ ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ map(_:) Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° Int Π² ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° String. ΠΠ°ΡΡΠΈΠ² [16, 58, 510] ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° [«OneSix», «FiveEight», «FiveOneZero»] :
let digitNames = [
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
ΠΠΎΠ΄ Π²ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠΈΠΉ ΡΠΈΡΡΡ ΠΈ ΠΈΡ Π°Π½Π³Π»ΠΈΠΉΡΠΊΡΡΒ Π²Π΅ΡΡΠΈΡΒ ΠΈΠΌΠ΅Π½. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² numbers Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° String, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄ map(_:) ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² number.map Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΏΠΎΡΠ»Π΅ map, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ map(_:) ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ:
let strings = numbers.map { (number) -> String in
var number = number
var output = ""
repeat {
output = digitNames[number % 10]! + output
number /= 10
} while number > 0
return output
}
//ΡΠΈΠΏ ΡΡΡΠΎΠΊ Π±ΡΠ» Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊ [String]
//Π·Π½Π°ΡΠ΅Π½ΠΈΡ ["OneSix", "FiveEight", "FiveOneZero"]
ΠΠ΅ΡΠΎΠ΄ map(_:) Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, number, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ map.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ number ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ number, ΡΠ°ΠΊ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. (ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ.) ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ String Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° map(_:).
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΈΡ ΡΡΡΠΎΠΊΡ, Π½Π°Π·Π²Π°Π½Π½ΡΡ output, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. ΠΠ½ΠΎ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠΈΡΡΡ number, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ ΠΎΡΡΠ°ΡΠΊΠΎΠΌΒ ( number % 10 ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΒ Π·Π°ΡΠ΅ΠΌ ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΡΡΡΡ ΡΠΈΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅Β digitNames. ΠΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎΒ ΡΠΈΡΠ»Π°,Β Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌ 0.
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
ΠΡΠ·ΠΎΠ² ΡΠ»ΠΎΠ²Π°ΡΡ digitNames ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΡΠ°Π±ΡΠΊΡΠΈΠΏΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌ (!), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π±ΡΠΊΡΠΈΠΏΡ ΡΠ»ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π±ΡΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ ΠΌΡ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ number % 10 Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ digitNames, ΡΠ°ΠΊ ΡΡΠΎ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° String Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΡΠΊΡΠΈΠΏΡΠ°.
Π‘ΡΡΠΎΠΊΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ digitNames, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ output, ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠΈΡΠ»Π° Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.(ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ number % 10 Π΄Π°Π΅Ρ Π½Π°ΠΌ 6 Π΄Π»Ρ 16, 8 Π΄Π»Ρ 58 ΠΈ 0 Π΄Π»Ρ 510).
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ number ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΡΠ°ΡΠΊΠ° Π΄Π΅Π»ΠΈΡΡΡ Π½Π° 10. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Int, ΡΠΎ Π½Π°ΡΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π²Π½ΠΈΠ·, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ 16 ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² 1, 58 Π² 5, 510 Π² 51.
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ ΠΏΠΎΠΊΠ° number /= 10 Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌ 0, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΡΠΎΠΊΠ° output Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΈ map(_:).
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ map(_:), ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²Π½ΡΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ map(_:).
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ. ΠΠΎΡΠ»Π΅ Π·Π°Ρ Π²Π°ΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅Π»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΆΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
Π Swift ΡΠ°ΠΌΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΡΠΎΡΠΌΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΉ Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ makeIncrementer, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ incrementer. ΠΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ incrementer() Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ runningTotal ΠΈ amount ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΡΠ»Π΅ Π·Π°Ρ Π²Π°ΡΠ° ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ incrementer Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ makeIncrementer ΠΊΠ°ΠΊ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ runningTotal Π½Π° amount ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ makeIncrementer Void -> Int. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Int ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠ°ΠΊ Π΅Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ. Π£Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π² Π³Π»Π°Π²Π΅ «Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΡΠΈΠΏΡ».
Π€ΡΠ½ΠΊΡΠΈΡ makeIncrementer(forIncrement:) ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ runningTotal, Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0.
Π€ΡΠ½ΠΊΡΠΈΡ makeIncrementer(forIncrement:) ΠΈΠΌΠ΅Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Int Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ forIncrement ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ amount. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ runningTotal ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ makeIncrementer ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ incrementer, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ amount ΠΊ runningTotal ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ incrementer() ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠΉ:
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
Π€ΡΠ½ΠΊΡΠΈΡ incrementer() Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΎΠ½Π° ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° runningTotal ΠΈ amount Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ½Π° Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ, Π·Π°Ρ Π²Π°ΡΡΠ²Π°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ runningTotal ΠΈ amount ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡ Π²Π½ΡΡΡΠΈ. ΠΠ°Ρ Π²Π°Ρ ΡΡΡΠ»ΠΊΠΈ Π΄Π°Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ runningTotal Π½Π΅ ΠΈΡΡΠ΅Π·Π½Π΅Ρ ΠΏΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° makeIncrementer ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ runningTotal ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ incrementer().
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Swift ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠΏΠΈΡΒ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΈΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ.Β Swift ΡΠ°ΠΊΠΆΠ΅ Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΠΎ ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π½ΡΠΆΠ½Ρ.
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ makeIncrementer Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
let incrementByTen = makeIncrementer(forIncrement: 10)
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ incrementByTen ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ 10 ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ runningTotal ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. ΠΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΅Π΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
incrementByTen()
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 10
incrementByTen()
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 20
incrementByTen()
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 30
ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½ΠΎΠ²ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ runningTotal :
let incrementBySeven = makeIncrementer(forIncrement: 7)
incrementBySeven()
//Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 7
ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΡΠ° ( incrementByTen ) Π·Π°ΡΡΠ°Π²ΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ runningTotal ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΡ Π² incrementBySeven :
incrementByTen()
//Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 40
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΡΒ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π½Ρ, Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ. Swift ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΏΠΈΡΠΊΠΈ Π·Π°Ρ Π²Π°ΡΠ°, Π΄Π»Ρ ΡΠ°Π·ΡΡΠ²Π° ΡΡΠΈΡ ΡΠΈΠ»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Π΅ΠΉ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² Π³Π»Π°Π²Π΅ Π¦ΠΈΠΊΠ»Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ incrementBySeven ΠΈ incrementByTen ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ runningTotal, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π·Π°Ρ Π²Π°ΡΠΈΠ»ΠΈ. ΠΡΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ»ΠΎΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ.
ΠΠΎΠ³Π΄Π° Π±Ρ Π²Ρ Π½ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΠ΅ ΡΡΡΠ»ΠΊΡ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π²ΡΠ±ΠΎΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ»Π°Π΅ΡΡΡ incrementByTen, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, Π½ΠΎ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
ΠΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄Π²ΡΠΌ ΡΠ°Π·Π½ΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΡΠΎ ΠΎΠ±Π° ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅:
let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
//Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 50
ΠΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ±Π΅Π³Π°Π΅ΡΒ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½ΡΠ»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠΎ Π²Ρ ΠΏΠΈΡΠΈΡΠ΅ @escaping Π΄ΠΎ ΡΠΈΠΏΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±Π΅ΠΆΠ°ΡΡ.
ΠΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ±Π΅Π³Π°ΡΡΠ΅Π΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ,Β ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΒ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ. Π’ΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ. ΠΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅ΠΆΠ°ΡΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ·ΠΆΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
Π€ΡΠ½ΠΊΡΠΈΡΒ someFunctionWithEscapingClosure(_:) ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΡΒ @escaping, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π·Β @escaping ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° self ΡΠ²Π½ΠΎ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ someFunctionWithEscapingClosure(_:) Π² Π²ΠΈΠ΄Π΅ ΡΠ±Π΅Π³Π°ΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° self Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ ΡΠ²Π½ΠΎ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π²Β someFunctionWithNonescapingClosure(_:) ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΠ±Π΅Π³Π°ΡΡΠΈΠΌ, Π·Π½Π°ΡΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° self Π½Π΅ΡΠ²Π½ΠΎ.
func someFunctionWithNonescapingClosure(closure: () -> Void) {
closure()
}
class SomeClass {
var x = 10
func doSomething() {
someFunctionWithEscapingClosure { self.x = 100 }
someFunctionWithNonescapingClosure { x = 200 }
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
// ΠΡΠ²Π΅Π΄Π΅Ρ "200"
completionHandlers.first?()
print(instance.x)
// ΠΡΠ²Π΅Π΄Π΅Ρ "100"
ΠΠ²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ — Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π»Ρ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Β ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΒ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π²Π½ΡΡΡΠΈ Π½Π΅Π΅.Β Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΡΡΠΈΡΡ ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΠΈΡΠ°Π² ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
ΠΠ΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°Π²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π½ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ assert(condition:message:file:line:) ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°Π²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΎ condition ΠΈ message ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ condition Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ±ΠΎΡΠΊΠ΅ Π΄Π΅Π±Π°Π³Π³Π΅ΡΠ°, Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ message Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ condition ΡΠ°Π²Π΅Π½ false.
ΠΠ²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π²Ρ ΡΠ°ΠΌΠΈ Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΡΠ΅. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ Π² Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΊΠ°ΠΊ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ:
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(customersInLine.count)
// ΠΡΠ²Π΅Π΄Π΅Ρ "5"
let customerProvider = { customersInLine.remove(at: 0) }
print(customersInLine.count)
// ΠΡΠ²Π΅Π΄Π΅Ρ "5"
print("Now serving \(customerProvider())!")
// ΠΡΠ²Π΅Π΄Π΅Ρ "Now serving Chris!"
print(customersInLine.count)
// ΠΡΠ²Π΅Π΄Π΅Ρ "4"
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° customersInLine ΡΠ΄Π°Π»ΡΠ΅ΡΡΡΒ ΠΊΠΎΠ΄ΠΎΠΌ Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ. ΠΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ customerProviderΒ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ String, Π° () -> String, ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
// customersInLine ΡΠ°Π²Π΅Π½ ["Alex", "Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: { customersInLine.remove(at: 0) } )
// ΠΡΠ²Π΅Π΄Π΅Ρ "Now serving Alex!"
Π€ΡΠ½ΠΊΡΠΈΡ serve(customer:) ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ²Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ serve(customer:)Β Π½ΠΈΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΏΠΎΡΡΠ°Π²ΠΈΠ² ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° @autoclosure. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π±Ρ ΠΎΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ String Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° customerProvider ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ @autoclosure.
// customersInLine ΡΠ°Π²Π΅Π½ ["Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: @autoclosure () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: customersInLine.remove(at: 0))
// ΠΡΠ²Π΅Π΄Π΅Ρ "Now serving Ewa!"
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
Π‘Π»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΎΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠ·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΡΠ±Π΅ΠΆΠ°ΡΡ, ΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π° Π°ΡΡΠΈΠ±ΡΡΠ° ΠΈ @autoclosure, ΠΈ @escaping. ΠΡΡΠΈΠ±ΡΡ @escaping ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ Π² Π³Π»Π°Π²Π΅ Π‘Π±Π΅Π³Π°ΡΡΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
// customersInLine ΡΠ°Π²Π΅Π½ ["Barry", "Daniella"]
var customerProviders: [() -> String] = []
func collectCustomerProviders(_ customerProvider: @autoclosure @escaping () -> String) {
customerProviders.append(customerProvider)
}
collectCustomerProviders(customersInLine.remove(at: 0))
collectCustomerProviders(customersInLine.remove(at: 0))
print("Collected \(customerProviders.count) closures.")
// ΠΡΠ²Π΅Π΄Π΅Ρ "Collected 2 closures."
for customerProvider in customerProviders {
print("Now serving \(customerProvider())!")
}
// ΠΡΠ²Π΅Π΄Π΅Ρ "Now serving Barry!"
// ΠΡΠ²Π΅Π΄Π΅Ρ "Now serving Daniella!"
Π ΠΊΠΎΠ΄Π΅ Π²ΡΡΠ΅, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° customer, ΡΡΠ½ΠΊΡΠΈΡ collectCustomerProviders(_:) Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ customerProviders. ΠΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° customerProvider Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ βΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅β Π½Π° βΠΏΠΎΠ±Π΅Π³β ΠΈΠ· Π·ΠΎΠ½Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Ctrl+Enter.
ΠΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Ctrl+Enter.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Swift ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ / Habr
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Objective-C 2.0 ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈ), ΡΠ°Π½Π΅Π΅ ΡΠΏΠΏΠ»ΠΎΠ²ΡΠΊΠΈΠΉ API ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΈΡ Π½Π΅ΠΎΡ ΠΎΡΠ½ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΡΠ°ΡΡΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΠΎΠ΄ iOS Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ΠΌ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²ΡΠΎΠ΄Π΅ AFNetworking, Π³Π΄Π΅ Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ. Π‘ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Swift, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π² API, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ ΡΡΠ°Π»ΠΎ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² Swift, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ Π½ΠΈΠΌΠΈ Β«Π²ΡΡΠ²ΠΎΡΡΡΡΒ».ΠΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌΡ, ΠΎΡ ΡΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΊ Π²Π΅ΡΠ΅Π»ΠΎΠΌΡ. ΠΠ°ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈΠ½ΠΎΡΡ ΠΈΠ·Π²ΠΈΠ½Π΅Π½ΠΈΡ Π·Π° ΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Π½ΡΡ Β«ΡΡΠ½ΠΊΡΠΈΡΒ», Β«ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΒ» ΠΈ Β«DoubleΒ», Π½ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ½ΠΈ ΡΠ»ΠΎΠ² Π½Π΅ Π²ΡΠΊΠΈΠ½Π΅ΡΡ.
1.1. ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΊΡΠ΅ΠΏΠΈΠΌΡΡ Ρ ΠΌΡΡΠ»ΡΡ, ΡΡΠΎ Π² Swift ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΡΠΈΡΠ΅Π»ΡΠΌΠΈ Π³ΠΎΡΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈΒ». ΠΡΠΎΡ ΡΠΈΠΏ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΠΈΠΏΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π²Π΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ:
func add(op1: Double, op2: Double) -> Double {
return op1 + op2
}
func subtract(op1: Double, op2: Double) -> Double {
return op1 - op2
}
ΠΡ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
(Double, Double) -> Double
ΠΡΠΎΡΠ΅ΡΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ: Β«ΠΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π΄Π²ΡΠΌΡ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° Double ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Double.Β»
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ°:
// ΠΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
var operation: (Double, Double) -> Double
// Π‘ΠΌΠ΅Π»ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
// Π½ΡΠΆΠ½ΠΎΠΉ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
for i in 0..<2 {
if i == 0 {
operation = add
} else {
operation = subtract
}
let result = operation(1.0, 2.0) // "ΠΡΠ·ΡΠ²Π°Π΅ΠΌ" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
println(result)
}
ΠΠΎΠ΄, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅, Π²ΡΠ²Π΅Π΄Π΅Ρ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
3.0
-1.0
1.2. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΡΡ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π»Π° ΠΎΠ΄Π½Ρ ΠΈΠ· Π½Π°ΡΠΈΡ ΡΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΈΠΏΠ° (Double, Double) -> Double Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΎΡ ΡΠ°ΠΊ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ:
// (1)
func performOperation(op1: Double, op2: Double, operation: (Double, Double) -> Double) -> Double { // (2)
return operation(op1, op2) // (3)
}
Π Π°Π·Π±Π΅ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π° ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ performOperation ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
- op1 ΡΠΈΠΏΠ° Double (op β ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΡ Β«ΠΎΠΏΠ΅ΡΠ°Π½Π΄Β»)
- op2 ΡΠΈΠΏΠ° Double
- operation ΡΠΈΠΏΠ° (Double, Double) -> Double
Π ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅Π»Π΅ performOperation ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ operation, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π² Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΡΡ Π΄Π²Π° ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
ΠΠΎΠΊΠ° ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎ, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΡ, Π³ΠΎΡΠΏΠΎΠ΄Π°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°ΠΊΠ»ΡΡΠΈΠ² Π΅Π΅ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ {} ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ:
let result = performOperation(1.0, 2.0, {(op1: Double, op2: Double) -> Double in
return op1 + op2 // (5)
}) // (4)
println(result) // ΠΡΠ²ΠΎΠ΄ΠΈΡ 3.0 Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
ΠΡΡΡΠ²ΠΎΠΊ ΠΊΠΎΠ΄Π° (op1: Double, op2: Double) -> Double in β ΡΡΠΎ, ΡΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΡ, Β«Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΒ» Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. Π‘ΠΎΡΡΠΎΠΈΡ ΠΎΠ½ ΠΈΠ·:
- ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² op1, op2 ΡΠΈΠΏΠ° Double Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ
- Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ -> Double
- ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° in
ΠΡΠ΅ ΡΠ°Π· ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΠΏΠΎ ΠΏΡΠ½ΠΊΡΠ°ΠΌ:
(1) ΠΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ performOperation
(2) ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ²Π° ΠΏΠ΅ΡΠ²ΡΡ β ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π°Π΄ ΡΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ.
(3) performOperation Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
(4) Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² performOperation Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ.
(5) Π ΡΠ΅Π»Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π°Π΄ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ.
ΠΠ²ΡΠΎΡΡ Swift ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°Π»ΠΎ ΡΡΠΈΠ»ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠ·ΡΠΊΠ° ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΠ΅ Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°
2.1. ΠΠ·Π±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΎΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ ΡΠ²Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΆΠ΅ Π·Π½Π°Π΅Ρ ΠΎ Π½ΠΈΡ . ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
performOperation(1.0, 2.0, {(op1, op2) -> Double in
return op1 + op2
})
2.2. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Β«Ρ Π²ΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ».
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π΅ΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ, ΠΈ ΠΊΠΎΠ΄ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ ΠΊ Ρ Π²ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π°:
performOperation(1.0, 2.0) {(op1, op2) -> Double in
return op1 + op2
}
2.3. ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Β«returnΒ».
ΠΡΠΈΡΡΠ½Π°Ρ (Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ) ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ·ΡΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΈ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Β«returnΒ» ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ:
performOperation(1.0, 2.0) {(op1, op2) -> Double in
op1 + op2
}
2.4. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ΅Π½ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Swift ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΠ΅Π½ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ (Π°Π½Π³Π». shorthand) ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ. Π’.Π΅. ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ $n, Π³Π΄Π΅ n β ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½ΡΠ»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°ΠΌ, ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π΅ΡΡ Β«Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΒ» Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΆΠ΅ Π½Π΅ Π½Π΅ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠΌΡΡΠ»ΠΎΠ²ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ:
performOperation(1.0, 2.0) { $0 + $1 }
Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ, ΡΡΠ° Π·Π°ΠΏΠΈΡΡ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅.
2.5. Π₯ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌ: ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ΅ ΡΡΠΎ Π±ΡΠ»ΠΈ Π΅ΡΠ΅ ΡΠ²Π΅ΡΠΎΡΠΊΠΈ. Π‘Π΅ΠΉΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ³ΠΎΠ΄ΠΊΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΡΡΠΎ ΡΠΆΠ΅ Π·Π½Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ? ΠΠ½ Π·Π½Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (2) ΠΈ ΠΈΡ ΡΠΈΠΏΡ (Double ΠΈ Double). ΠΠ½Π°Π΅Ρ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Double). Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ΄Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°, ΠΎΠ½ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΊΠ°ΠΊ-ΡΠΎ Π΅ΡΠ΅?
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΄Π²ΡΠΌΡ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π°Π΄ ΡΡΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ). Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Ρ Π²ΡΠ·ΠΎΠ² Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
performOperation(1.0, 2.0, +)
ΠΡΠ°ΡΠΎΡΠ°!
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π½Π°ΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π² ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΊΠΎΠ΄Π°.
ΠΡΡΠ°ΡΠΈ, Swift ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ½ΠΈΡΠΈΠΈ. ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
func performComparisonOperation(op1: Double, op2: Double, operation: (Double, Double) -> Bool) -> Bool {
return operation(op1, op2)
}
println(performComparisonOperation(1.0, 1.0, >=)) // ΠΡΠ²Π΅Π΄Π΅Ρ "true"
println(performComparisonOperation(1.0, 1.0, <)) // ΠΡΠ²Π΅Π΄Π΅Ρ "false"
ΠΠ»ΠΈ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
func performBitwiseOperation(op1: Bool, op2: Bool, operation: (Bool, Bool) -> Bool) -> Bool {
return operation(op1, op2)
}
println(performBitwiseOperation(true, true, ^)) // ΠΡΠ²Π΅Π΄Π΅Ρ "false"
println(performBitwiseOperation(true, false, |)) // ΠΡΠ²Π΅Π΄Π΅Ρ "true"
Swift β Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ Π·Π°Π±Π°Π²Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΠΎΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠΎΠ΄ iOS ΠΈ Mac OS X.
___________________________________________________________________
UPD.: Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π²ΡΡΠΊΠ°Π·Π°Π»ΠΈ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΎ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. ΠΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π²ΡΠ΅ΡΠ° Π½Π°ΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Π½Π° Π·Π°Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΠΊΡΡΡ (binary heap). ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ MinHeap, ΡΠ°ΠΊ ΠΈ MaxHeap, Ρ.Π΅. ΠΊΡΡΠΈ, Π³Π΄Π΅ Π² ΠΊΠΎΡΠ½Π΅ Π΄Π΅ΡΠ΅Π²Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ°Π·ΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ MinHeap ΠΎΡ MaxHeap Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΠΌΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΉ ΠΊΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ BinaryHeap, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ comparison ΡΠΈΠΏΠ° (T, T) -> Bool. Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
heapify. ΠΡΠΎΡΠΎΡΠΈΠΏ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ³Π»ΡΠ΄Π΅Π» Π±Ρ ΡΠ°ΠΊ:
class BinaryHeap<T: Comparable>: DebugPrintable {
private var array: Array<T?>
private var comparison: (T, T) -> Bool
private var used: Int = 0
// ΠΠ»Π°-Π±Π»Π°-Π±Π»Π°
// Internal Methods
internal func removeTop() -> T? { //... }
internal func getTop() -> T? { //... }
// Public Methods:
func addValue(value: T) {
if used == self.array.count {
self.grow()
}
self.array[used] = value
heapifyToTop(used, comparison) // ΠΠ΄Π½ΠΎ ΠΈΠ· ΠΌΠ΅ΡΡ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
self.used++
}
init(size newSize: Int, comparison newComparison: (T, T) -> Bool) {
array = [T?](count: newSize, repeatedValue: nil)
comparison = newComparison
}
}
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ MinHeap ΠΈ MaxHeap Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ BinaryHeap, Π° Π² ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ. ΠΠΎΡ ΡΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π½Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ:
class MaxHeap<T: Comparable>: BinaryHeap<T> {
func getMax() -> T? {
return self.getTop()
}
func removeMax() -> T? {
return self.removeTop()
}
init(size newSize: Int) {
super.init(size: newSize, {$0 > $1})
}
}
class MinHeap<T: Comparable>: BinaryHeap<T> {
func getMin() -> T? {
return self.getTop()
}
func removeMin() -> T? {
return self.removeTop()
}
init(size newSize: Int) {
super.init(size: newSize, {$0 <= $1})
}
}
Swift | ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: 01.01.2018
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ (Ρlosures) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΠ½ΠΊΡΠΈΡΡ .
ΠΠΎ ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ:
Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ
Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ
Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (closure expressions), ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ
Π ΠΏΡΠΎΡΠ»ΡΡ ΡΠ΅ΠΌΠ°Ρ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
{ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ) -> ΡΠΈΠΏ_Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ_Π·Π½Π°ΡΠ΅Π½ΠΈΡ in ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ }
ΠΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅:
let hello = { print("Hello world")} hello() hello()
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ hello ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΌΡ Π΅Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ hello.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° hello Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ()->()
ΠΈΠ»ΠΈ ()-gt;Void
:
let hello: ()->Void = { print("Hello world")}
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° in:
let hello = { (message: String) in print(message) } hello("Hello") hello("Salut") hello("Ni hao")
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ — message, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠΏ String. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° in, Π° ΠΏΠΎΡΠ»Π΅ ΠΈΠ΄ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
let sum = { (x: Int, y: Int) -> Int in return x + y } print(sum(2, 5)) // 7 print(sum(12, 15)) // 27 print(sum(5, 3)) // 8
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ. ΠΠ΅ΡΠ΅Π΄ΠΊΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ:
func operation(_ a: Int, _ b: Int, _ action: (Int, Int) -> Int) -> Int{ return action(a, b) } let x = 10 let y = 12 let result1 = operation(x, y, {(a: Int, b: Int) -> Int in return a + b }) print(result1) // 22 var result2 = operation(x, y, {(a: Int, b: Int) -> Int in return a - b}) print(result2) // -2
ΠΠ΄Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ operation()
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²
operation ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ — ΠΈΡ Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ Π½Π°Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ΄ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΎΠΏΡΡΠΊΠ°ΡΡ:
let x = 10 let y = 12 let result1 = operation(x, y, {(a, b) in a + b }) print(result1) // 22 let result2 = operation(x, y, {(a, b) in a - b }) print(result2) // -2
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΠΈΠ΄ΠΈΡ, Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° (Int, Int) -> Int
,
ΡΠΎ Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° Int. ΠΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² a ΠΈ b.
Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Int, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° in
Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return.
ΠΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
let x = 10 let y = 12 let result1 = operation(x, y, {$0 + $1}) print(result1) // 22 let result2 = operation(x, y, {$0 - $1}) print(result2) // -2
$0
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π° $1
— Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΠΈΡ
ΠΈ ΠΏΠΎΠΉΠΌΠ΅Ρ,
ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠ»Π°.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π΄Π΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ — ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π», ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅:
let x = 10 let y = 12 let result1 = operation(x, y, +) print(result1) // 22 let result2 = operation(x, y, -) print(result2) // -2
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ,ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΠΆΠ΅.
ΠΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΊΠ°ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π½Π° Π²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΆΠΈΠ·Π½ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ:
func action() -> (()->Int){ var val = 0 return { val = val+1 return val } } let inc = action() print(inc()) // 1 print(inc()) // 2
ΠΠ΄Π΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ action, ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ°ΠΌΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠΎ ΡΠ°ΠΊΡΡ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ val Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ val ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ, ΠΎΠ½ΠΎ Π½Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊ Π½ΡΠ»Ρ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ val ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π³Π΄Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ°Ρ Π²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π² Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ:
var a = 14 var b = 2 let myClosure: () -> Int = {return a + b} print(myClosure()) // 16 a = 5 b = 6 print(myClosure()) // 11
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° myClosure, ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ a ΠΈ b. Π‘ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ myClosure. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ :
var a = 14 var b = 2 let myClosure: () -> Int = {[a, b] in return a + b} print(myClosure()) // 16 a = 5 b = 6 print(myClosure()) // 16
ΠΠ΅ΡΠ΅Π΄Π°Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ: [a, b]
, ΠΌΡ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ ΠΈΡ
Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ
ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
Swift — ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ! Π Π΅ΠΊΠ»Π°ΠΌΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, Π΄Π΅Π»Π°Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΠ°Ρ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΈ Π²Π°ΠΆΠ½ΡΠΉ Π΄Π»Ρ ΠΠ°Ρ, ΡΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π° Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ ΡΠ΅ΠΊΠ»Π°ΠΌΡ.Β Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΡΠΈΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΉΡ!
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡΒ — ΡΡΠΎ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.Β ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Swift ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈ Π² C ΠΈ Objective-C ΠΈ Π½Π° Π»ΡΠΌΠ±Π΄Ρ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π»ΡΠ±ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ.Β ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡΒ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌΒ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .Β Swift ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Π·Π°Ρ Π²Π°ΡΠ° Π΄Π»Ρ Π²Π°Ρ.
ΠΠΠΠΠ’ΠΠ
ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ Π·Π°Ρ Π²Π°ΡΠ°.Β ΠΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π½ΠΈΠΆΠ΅ Π²Β ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ°Ρ Π²Π°Ρ ΡΠ΅Π½Π½ΠΎΡΡСй» .
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π²Β ΡΡΠ½ΠΊΡΠΈΡΡ Β , Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ ΡΠ»ΡΡΠ°ΡΠΌΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ.Β ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ:
- ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ — ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΡ ΠΈ Π½Π΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
- ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ — ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΡ ΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΌΠ΅ΡΠ°ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ — ΡΡΠΎ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Swift ΠΈΠΌΠ΅ΡΡ ΡΠΈΡΡΡΠΉ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΡΡ ΠΊΠΎΡΠΎΡΠΊΠΎΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ Π² ΠΎΠ±ΡΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ .Β ΠΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ:
- ΠΡΠ²ΠΎΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
- ΠΠ΅ΡΠ²Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΡ ΠΎΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
- Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
- Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ
ΠΠ°ΠΊΡΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π²Β Nested FunctionsΒ , ΡΠ²Π»ΡΡΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ.Β ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ²ΠΎΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ°ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΒ — ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΊΡΠ°ΡΠΊΠΎΠΌ, ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅.Β ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π² ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΡΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ.Β ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡ ΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎΡΠ½ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅ΡΒ sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
Π‘ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Swift ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌΒ sorted(by:)
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.Β ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈΒ sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΠΎ ΠΈ ΡΡΠ°ΡΡΠΉ, Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.Β ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡΒ sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΒ sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°Β String
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.Β ΠΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
sorted(by:)
ΠΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ,Β ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΒ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΈΒ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΒ Bool
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ,Β Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΈΡΡΡΡΡΡ.Β ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ,Β true
Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠΎΡΡΡΒ ΠΏΠ΅ΡΠ΅Π΄Β Π²ΡΠΎΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ Π²Β false
ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Β String
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠ°Β .(String,Β String)Β ->Β Bool
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ — Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Β sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄Ρ:
func backward(_ s1: String, _ s2: String) -> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° (Β s1
) Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π²ΡΠΎΡΠ°Ρ ΡΡΡΠΎΠΊΠ° (Β s2
),Β backward(_:_:)
ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅ΡΡΡΒ true
, ΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΡΡΠΎΒ s1
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π½ΡΡΠ΅Β s2
Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.Β ΠΠ»Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ°Ρ
Β«Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌΒ» ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ΅, ΡΠ΅ΠΌΒ».Β ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±ΡΠΊΠ²Π°Β "B"
Β«Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌΒ» Π±ΡΠΊΠ²Π°Β "A"
, Π° ΡΡΡΠΎΠΊΠ°Β "Tom"
Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΡΡΡΠΎΠΊΠ°Β "Tim"
.Β ΠΡΠΎ Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΡΠΉ Π²ΠΈΠ΄ ΡΒ "Barry"
ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΒ "Alex"
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Β ).Β Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡ.aΒ >Β b
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡ
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΠ±ΡΡΡ ΡΠΎΡΠΌΡ:
{ (parameters) -> return type in
statements
}
ΠΒ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΒ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²-ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.Β ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Variadic ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Variadic.Β ΠΠΎΡΡΠ΅ΠΆΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ backward(_:_:)
ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π΅ΡΡ
Ρ:
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ·Β backward(_:_:)
ΡΡΠ½ΠΊΡΠΈΠΈ.Β Π ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊΒ .Β ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡΒ Π²Π½ΡΡΡΠΈΒ ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΎΠΊ, Π° Π½Π΅ Π²Π½Π΅ ΠΈΡ
.(s1:Β String,Β s2:Β String)Β ->Β Bool
ΠΠ°ΡΠ°Π»ΠΎ ΡΠ΅Π»Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΒ in
ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ.Β ΠΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ, ΠΈ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡΡΡ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ:
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 } )
ΠΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠΈΠΉ Π²ΡΠ·ΠΎΠ²Β sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΡΡΠ°Π»ΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ.Β ΠΠ°ΡΠ° ΡΠΊΠΎΠ±ΠΎΠΊ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π²Π΅ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π°.Β ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ.
ΠΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ° ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Swift ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏΡ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.Β sorted(by:)
ΠΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠ°Β .Β ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ,Β ΡΡΠΎΒ ΠΈΒ ΡΠΈΠΏΠ°ΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡΠΏΠΎΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ.Β ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ, ΡΡΡΠ΅Π»ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° (Β ) ΠΈ ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½Ρ:(String,Β String)Β ->Β Bool
(String,Β String)
Bool
->
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
ΠΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.Β Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² Π΅Π³ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΠΏΡ ΡΠ²Π½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅, ΠΈ ΡΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.Β Π ΡΠ»ΡΡΠ°Π΅Β sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ΅Π»Ρ Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ½Π° ΠΈΠ· ΡΠ°ΠΊΡΠ°, ΡΡΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ, ΠΈ Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π·Π°ΠΊΡΡΡΠΈΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΒ String
Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΡΡΡΠΎΠΊ.
ΠΠ΅ΡΠ²Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΡ ΠΈΠ· Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡ
Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΎΠΏΡΡΠΊΠ°ΡΒ return
ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ· ΠΈΡ
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
ΠΠ΄Π΅ΡΡ ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈΒ sorted(by:)
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΎΡΡΠ½ΡΠ΅Ρ, ΡΡΠΎΒ Bool
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ.Β ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (Β ), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΒ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ Π½Π΅Ρ, ΠΈΒ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½ΠΎ.s1Β >Β s2
Bool
return
Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
Swift Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π·Π°ΡΠ²ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌΒ $0
,Β $1
,Β $2
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ²ΠΎΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Π° ΡΠΈΡΠ»ΠΎ ΠΈ ΡΠΈΠΏ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ
ΠΈΠΌΠ΅Π½ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.Β in
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΡΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΡΠ΅Π»Π°:
reversedNames = names.sorted(by: { $0 > $1 } )
ΠΠ΄Π΅ΡΡΒ $0
ΠΈΒ $1
ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉΒ String
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡΒ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ .
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅ΡΡΡ Π΅ΡΠ΅Β Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉΒ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²ΡΡΠ΅.Β String
Π’ΠΈΠΏΒ SwiftΒ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° more-than (Β >
) ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°Β String
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°Β Bool
.Β ΠΡΠΎ ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΏΡ ΠΌΠ΅ΡΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠΌΡ Π΄Π»ΡΒ sorted(by:)
ΠΌΠ΅ΡΠΎΠ΄Π°.Β Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Β«Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌΒ», ΠΈ Swift ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ, ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ:
reversedNames = names.sorted(by: >)
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠΌ.Β ΠΠ΅ΡΠΎΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Β .
ΠΠ°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π·Π°ΡΠ²ΠΎΡΡ
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π»ΠΈΠ½Π½ΡΠΌ,Β Π²ΠΌΠ΅ΡΡΠΎΒ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Β Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ .Β ΠΠ°Π²Π΅ΡΡΠ°ΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, Π²Ρ Π½Π΅ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΊΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ.
func someFunctionThatTakesAClosure(closure: () -> Void) {
// function body goes here
}
// Here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure(closure: {
// closure's body goes here
})
// Here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}
ΠΠ°ΠΊΡΡΡΠΈΠ΅ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΡΡΠΎΠΊ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎΒ Π²ΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π°Β Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡΒ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²Π½Π΅Β sorted(by:)
ΡΠΊΠΎΠ±ΠΎΠΊ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅:
reversedNames = names.sorted() { $0 > $1 }
ΠΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΏΠ°ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊΒ ()
ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
reversedNames = names.sorted { $0 > $1 }
ΠΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅, ΠΈ Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.Β ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΒ Array
ΡΠΈΠΏΠ°Β SwiftΒ Π΅ΡΡΡΒ map(_:)
ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.Β ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°) Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.Β Π₯Π°ΡΠ°ΠΊΡΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Β map(_:)
ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΠΈ ΠΈΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΠΎΡ ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΒ map(_:)
ΠΌΠ΅ΡΠΎΠ΄ Ρ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°Β Int
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΌΠ°ΡΡΠΈΠ²Β String
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.Β ΠΠ°ΡΡΠΈΠ²Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°Β :[16,Β 58,Β 510]
["OneSix",Β "FiveEight",Β "FiveOneZero"]
let digitNames = [
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ°ΠΌΠΈ ΠΈ Π°Π½Π³Π»ΠΎΡΠ·ΡΡΠ½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΈΡ ΠΈΠΌΠ΅Π½.Β ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», Π³ΠΎΡΠΎΠ²ΡΠΉ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΒ numbers
ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°Β String
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ²Π°Β map(_:)
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ:
let strings = numbers.map { (number) -> String in
var number = number
var output = ""
repeat {
output = digitNames[number % 10]! + output
number /= 10
} while number > 0
return output
}
// strings is inferred to be of type [String]
// its value is ["OneSix", "FiveEight", "FiveOneZero"]
map(_:)
ΠΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°.Β ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ number
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡΒ number
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ number
, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.Β (ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ.) ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ String
, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ Π² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΌ Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΡΠΎΠΊΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡΒ output
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.Β ΠΠ½ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠΈΡΡΡΒ number
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΡΠ°ΡΠΊΠ° (Β ), ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΡΠΈΡΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ Π²Β ΡΠ»ΠΎΠ²Π°ΡΠ΅.Β ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ Π½ΡΠ»Ρ.numberΒ %Β 10
digitNames
ΠΠΠΠΠ’ΠΠ
ΠΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠΌΒ
digitNames
Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ (Β!
), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.Β Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎΒ Π΄Π»ΡΒ ΡΠ»ΠΎΠ²Π°ΡΡΒ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Β , ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡΒ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΡΡΠ΅Π³ΠΎΡΡ Π² Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°,Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊΒ .numberΒ %Β 10
digitNames
String
Π‘ΡΡΠΎΠΊΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΈΠ·Β digitNames
ΡΠ»ΠΎΠ²Π°ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π²Β ΠΏΠ΅ΡΠ΅Π΄Π½Π΅ΠΉΒ ΡΠ°ΡΡΠΈΒ output
, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΡΠΎΠΈΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΈΡΠ»Π° Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅Β .Β (ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β Π΄Π»ΡΒ ,Β Π΄Π»ΡΒ ΠΈΒ Π΄Π»ΡΒ .)numberΒ %Β 10
6
16
8
58
0
510
number
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»ΠΈΡΡΡΒ 10
.Β ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΎΠ½ΠΎ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡΒ 16
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΒ 1
,Β 58
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΒ 5
ΠΈΒ 510
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΒ 51
.
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅Β number
ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌΒ 0
; Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½ΡΒ output
ΡΡΡΠΎΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²Β map(_:)
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²ΠΎΒ map(_:)
Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ°Ρ Π²Π°Ρ ΡΠ΅Π½Π½ΠΎΡΡΠ΅ΠΉ
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ΡΒ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡΒ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ.Β ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅Π»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ»Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
Π Swift ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΡΠ΅Π»Π΅ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ²ΠΎΠ΅ΠΉ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈΒ makeIncrementer
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡΒ incrementer
.Β ΠΠ»ΠΎΠΆΠ΅Π½Π½Π°ΡΒ incrementer()
ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ runningTotal
ΠΈΒ amount
ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.Β ΠΠΎΡΠ»Π΅ Π·Π°Ρ
Π²Π°ΡΠ° ΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ incrementer
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡΒ makeIncrementer
ΠΊΠ°ΠΊ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡΒ runningTotal
ΠΏΡΠΈΒ amount
ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅.
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
Π’ΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Β makeIncrementer
isΒ .Β ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΒ ΡΡΠ½ΠΊΡΠΈΡΒ , Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.Β Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΒ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.Β Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΌ.Β Π’ΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ Π’ΠΈΠΏΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Β .()Β ->Β Int
Int
makeIncrementer(forIncrement:)
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅Β runningTotal
, ΡΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠΌΠΌΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΡ ,Β ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ.Β ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌΒ 0
.
makeIncrementer(forIncrement:)
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½Β Int
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΊΠΎΠΉΒ forIncrement
, ΠΈ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Β amount
.Β ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΡΡΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎΒ runningTotal
Π½ΡΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°.Β makeIncrementer
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΒ ΠΈΠΌΠ΅Π½Π΅ΠΌΒ incrementer
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅.Β ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΒ amount
ΠΊΒ runningTotal
, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Π°ΡΒ incrementer()
ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠΉ:
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
incrementer()
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ Π²ΡΠ΅Β ΠΆΠ΅ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊΒ runningTotal
ΠΈΒ amount
Π²Π½ΡΡΡΠΈ Π΅Π³ΠΎ ΡΠ΅Π»Π° ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Π·Π°Ρ
Π²Π°ΡΠ°Β ΡΡΡΠ»ΠΊΠΈΒ Π½Π°Β runningTotal
ΠΈΒ amount
ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡ
Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠ΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ°Ρ
Π²Π°ΡΠΈΠ² ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ,Β ΡΡΠΎΒ runningTotal
ΠΈΒ amount
Π½Π΅ ΠΈΡΡΠ΅Π·Π°Π΅Ρ ,Β ΠΊΠΎΠ³Π΄Π° Π²ΡΠ·ΠΎΠ²Β makeIncrementer
ΠΊΠΎΠ½ΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ,Β ΡΡΠΎΒ runningTotal
Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Β incrementer
ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.
ΠΠΠΠΠ’ΠΠ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Swift ΠΌΠΎΠΆΠ΅Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡΒ ΠΊΠΎΠΏΠΈΡΒ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ ΠΈ Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
Swift ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΒ makeIncrementer
Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
let incrementByTen = makeIncrementer(forIncrement: 10)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°ΡΒ incrementByTen
Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΒ 10
ΠΊ ΡΠ²ΠΎΠ΅ΠΉΒ runningTotal
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.Β ΠΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
incrementByTen()
// returns a value of 10
incrementByTen()
// returns a value of 20
incrementByTen()
// returns a value of 30
ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½ΠΎΠ²ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡΒ runningTotal
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ:
let incrementBySeven = makeIncrementer(forIncrement: 7)
incrementBySeven()
// returns a value of 7
ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ incrementer (Β incrementByTen
) ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡΒ runningTotal
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π·Π°Ρ
Π²Π°ΡΠ΅Π½Π½ΡΡΒ incrementBySeven
:
incrementByTen()
// returns a value of 40
ΠΠΠΠΠ’ΠΠ
ΠΡΠ»ΠΈ Π²Ρ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, ΡΡΡΠ»Π°ΡΡΡ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π½Ρ, Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ ΡΠΈΠ»ΡΠ½ΡΠΉ ΡΡΡΠ»ΠΎΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ.Β Swift ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΒ ΡΠΏΠΈΡΠΊΠΈ Π·Π°Ρ Π²Π°ΡΠ°,Β ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΡΠ²Π°ΡΡ ΡΡΠΈ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΡΡΡΠ»ΠΎΠΊ.Β ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠΌ.Β Strong Reference Cycles Π΄Π»Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉΒ .
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ»ΠΎΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅,Β incrementBySeven
ΠΈΒ incrementByTen
ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠ΅, Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ Π΅ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ΅Β runningTotal
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ,Β ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π·Π°Ρ
Π²Π°ΡΠΈΠ»ΠΈ.Β ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡΒ ΡΡΡΠ»ΠΎΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈΒ .
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠ°ΠΊΒ ΡΡΡΠ»ΠΊΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅.Β Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ Π²ΡΠ±ΠΎΡ Π·Π°ΡΠ²ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉΒ incrementByTen
Β ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊΒ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅, Π° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π·Π°ΡΠ²ΠΎΡΠ°.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄Π²ΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΎΠ±Π΅ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅.
let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// returns a value of 50
incrementByTen()
// returns a value of 60
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Β alsoIncrementByTen
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π²ΡΠ·ΠΎΠ²ΡΒ incrementByTen
.Β ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π° ΠΎΠ½ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΎΠ½ΠΈ ΠΎΠ±Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΈΡΠΎΠ³.
ΠΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅Β ΡΠΊΡΠ°Π½ΠΈΡΡΠ΅ΡΒ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°.Β ΠΠΎΠ³Π΄Π° Π²Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡΒ @escaping
ΠΏΠ΅ΡΠ΅Π΄ ΡΠΈΠΏΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ — ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.Β Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π° — Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.Β ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
someFunctionWithEscapingClosure(_:)
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²Β ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ² ,Β ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈΒ @escaping
, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΊΡΡΡΠΈΡΒ @escaping
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΒ self
ΡΠ²Π½ΠΎΒ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π°Β Π½Π΅Π³ΠΎ.Β ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅Β someFunctionWithEscapingClosure(_:)
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΡΡΡΠΈΠΌ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡΒ self
ΡΠ²Π½ΠΎ.Β ΠΠ°ΠΏΡΠΎΡΠΈΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅Β someFunctionWithNonescapingClosure(_:)
ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΡΠΊΠ°ΠΏΠΈΡΡΡΡΠΈΠΌ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡΒ self
Π½Π΅ΡΠ²Π½ΠΎ.
func someFunctionWithNonescapingClosure(closure: () -> Void) {
closure()
}
class SomeClass {
var x = 10
func doSomething() {
someFunctionWithEscapingClosure { self.x = 100 }
someFunctionWithNonescapingClosure { x = 200 }
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
// Prints "200"
completionHandlers.first?()
print(instance.x)
// Prints "100"
Autoclosures
AutoclosureΒ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ,Β ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π²Β ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ½ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π½Π΅Π³ΠΎ.Β ΠΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΠΎΠ±ΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΎΒ Π²ΡΠ·ΡΠ²Π°ΡΡΒ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°Π²ΡΠΎΠ·Π°ΠΌΠ΅Π½Ρ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΎ Π΄Π»ΡΒ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈΒ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΡΠ½ΠΊΡΠΈΠΈ.Β ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,Β assert(condition:message:file:line:)
ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ autoclosure Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
Β condition
ΠΈΒ message
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²;Β Π΅Π³ΠΎΒ condition
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ
ΡΠ±ΠΎΡΠΊΠ°Ρ
, Π° Π΅Π³ΠΎΒ message
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½Β condition
Π΅ΡΡΡΒ false
.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ ΠΎΡΠ΅Π½ΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ Π²ΡΠ·ΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅.Β ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠΌ Π² Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ.Β ΠΠΎΠ΄ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠ΅Π½ΠΊΡ.
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(customersInLine.count)
// Prints "5"
let customerProvider = { customersInLine.remove(at: 0) }
print(customersInLine.count)
// Prints "5"
print("Now serving \(customerProvider())!")
// Prints "Now serving Chris!"
print(customersInLine.count)
// Prints "4"
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΒ customersInLine
ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠΌ Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·Π²Π°Π½ΠΎ.Β ΠΡΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ.Β ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠΈΠΏΒ customerProvider
— ΡΡΠΎ Π½Π΅Β String
ΠΏΡΠΎΡΡΠΎΒ ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ.()Β ->Β String
ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
// customersInLine is ["Alex", "Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: { customersInLine.remove(at: 0) } )
// Prints "Now serving Alex!"
serve(customer:)
Π€ΡΠ½ΠΊΡΠΈΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ Π²ΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ,Β ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.Β ΠΠ΅ΡΡΠΈΡΒ serve(customer:)
Π½ΠΈΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΌΠ΅ΡΠ°Ρ ΡΠΈΠΏ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Β @autoclosure
Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ.Β Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½Π° Π²Π·ΡΠ»Π°Β String
Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.Β ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡΒ customerProvider
ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡΒ @autoclosure
Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ.
// customersInLine is ["Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: @autoclosure () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: customersInLine.remove(at: 0))
// Prints "Now serving Ewa!"
ΠΠΠΠΠ’ΠΠ
Π§ΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΡΠ΄Π½ΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.Β ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΡΠ΅Π½ΠΊΠ° ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ autoclosure ,Β ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΒ @autoclosure
ΠΈΒ @escaping
Π°ΡΡΠΈΠ±ΡΡΡ.Β @escaping
ΠΡΡΠΈΠ±ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅ Π²Β ΠΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ClosuresΒ .
// customersInLine is ["Barry", "Daniella"]
var customerProviders: [() -> String] = []
func collectCustomerProviders(_ customerProvider: @autoclosure @escaping () -> String) {
customerProviders.append(customerProvider)
}
collectCustomerProviders(customersInLine.remove(at: 0))
collectCustomerProviders(customersInLine.remove(at: 0))
print("Collected \(customerProviders.count) closures.")
// Prints "Collected 2 closures."
for customerProvider in customerProviders {
print("Now serving \(customerProvider())!")
}
// Prints "Now serving Barry!"
// Prints "Now serving Daniella!"
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π΅ Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Β customerProvider
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°,Β collectCustomerProviders(_:)
ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΊΒ customerProviders
ΠΌΠ°ΡΡΠΈΠ²Ρ.Β ΠΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ.Β Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β customerProvider
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ! Π Π΅ΠΊΠ»Π°ΠΌΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, Π΄Π΅Π»Π°Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΠ°Ρ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΈ Π²Π°ΠΆΠ½ΡΠΉ Π΄Π»Ρ ΠΠ°Ρ, ΡΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π° Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ ΡΠ΅ΠΊΠ»Π°ΠΌΡ.Β Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΡΠΈΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΉΡ!
9.1. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ — ΠΡΠ½ΠΎΠ²Ρ | Swift World
let strings = numbers.map{ (number) -> String in
var number = number
var output = ""
repeat {
output = digitNames[number % 10]! + output
number /= 10
} while number > 0
return output
}
// strings Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΠΈΠΏ [String]
// Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ ["OneSix", "FiveEight", "FiveOneZero"]
Π’Π΅ΠΏΠ΅ΡΡ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² numbers Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠΏΠ° String
, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ²Π° map(_:)
Π²ΠΎΠ»ΠΎΡΠ°ΡΠ΅Π΅ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅.ΠΠ΅ΡΠΎΠ΄ map(_:)
Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, number
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎΡ ΡΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ number
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ number
, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. (ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.) ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ String
, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠΎΠΉ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΎΡΠΎΠ±ΡΠ°ΠΆΡΠ½Π½ΠΎΠΌ Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΡΡΡΠΎΠΈΡ ΡΡΡΠΎΠΊΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ output
Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ ΡΠ²ΠΎΡΠΌ Π²ΡΠ·ΠΎΠ²Π΅. ΠΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠΈΡΡΡ number
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΎΡΡΠ°ΡΠΊΠ° ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ (number % 10)
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΡΠΈΡΡΡ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ digitNames
. ΠΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠ΅ΠΉ Π»ΡΠ±ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π±ΠΎΠ»ΡΡΠ΅Π΅ 0.
ΠΡΠ·ΠΎΠ² ΡΠ°Π±ΡΠΊΡΠΈΠΏΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ digitNames
ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ Π·Π½Π°ΠΊΠΎΠΌ (!), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π±ΡΠΊΡΠΈΠΏΡΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΠ±ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π°Π»ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΡΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ, ΡΡΠΎ number % 10
Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ°Π±ΡΠΊΡΠΈΡΠ° Π΄Π»Ρ ΡΠ»ΠΎΠ²Π°ΡΡ digitNames
, ΡΠ°ΠΊ ΡΡΠΎ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° String
, Ρ
ΡΠ°Π½ΠΈΠΌΠΎΠ³ΠΎ Π² ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΡΠΊΡΠΈΠΏΡΠ°.
Π‘ΡΡΠΎΠΊΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ digitNames
ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π½ΡΡ ΡΠ°ΡΡΡ output
, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. (ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ number % 10 Π΄Π°ΡΡ ΡΠΈΡΠ»ΠΎ 6 Π΄Π»Ρ 16, 8 Π΄Π»Ρ 58 ΠΈ 0 Π΄Π»Ρ 510.)
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ number
Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° 10. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΎ ΠΎΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΎ Π²Π½ΠΈΠ· ΠΏΡΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ, ΡΠ°ΠΊ ΡΡΠΎ 16 ΡΡΠ°Π½Π΅Ρ 1, 58 ΡΡΠ°Π½Π΅Ρ 5, Π° 510 ΡΡΠ°Π½Π΅Ρ 51.
ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° number
Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π΅Π½ 0, Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠΎΠΊΠ° output
Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅ΡΠΎΠ΄Π° map(_:)
.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° trailing-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΠΊΠ°ΡΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π²ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½ΡΡ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΡ ΠΌΠ΅ΡΠΎΠ΄Π° map(_:)
.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ (closure) Π² Swift β Swiftme.ru
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ (closure), ΠΈΠ»ΠΈ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½. ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ? ΠΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ·Π½Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠ°Π²Ρ. ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 1
1)ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ βHello, World!β.
2)ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅
3)ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ?
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
//1) // Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ΠΎ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ let closureHello = { print("Hello, World!") } //2) closureHello() //3) //Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ: () -> () type(of:closureHello) // (() -> ()).Type
Β
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 2
ΠΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠΎ:
1) ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ/Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
2) ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
3) ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
() -> (:) (_) -> () (Int) -> () -> () () -> Void () -> (String) () -> ()
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
1)
4 ΠΈ 6
2)
3, Ρ.ΠΊ. ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° Int, ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π·Π°Π΄Π°Π½ΠΈΠΈ Π½Π΅Ρ)
3)
3, Ρ.ΠΊ. ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° () -> ()
5, Ρ.ΠΊ. ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° String
Β
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3
1) ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° String ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ.
2) ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅
3) ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ?
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
//1) let closurePrintMessage = { (message: String) in print(message) } //2) closurePrintMessage("ΠΡΠΎΡ ΡΠ΅ΠΊΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ") // Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π’ΠΈΠΌΡΡΠΎΠΌ @magic1620 let printString: (String) -> () = { print($0) }
Β
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 4
1) ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π΄Π²Π° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡ
ΡΡΠΌΠΌΡ.
2) ΠΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ
3) ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
Π±ΡΠ΄Π΅Ρ Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ?
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
//1) let closureSumOfTwoInt = { (a: Int, b: Int) in return a + b } //2) closureSumOfTwoInt(4,7) //11 //3) // ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ - (Int, Int) -> Int type(of: closureSumOfTwoInt) // ((Int, Int) -> Int).Type
Β
ΠΠΎΡΡΡΠΏ Π·Π°ΠΊΡΡΡ
ΠΠ°Ρ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² iOS 8 Swift / Habr
ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ iOS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ MVC ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΊΠ°ΠΊ Π² ΠΏΡΡΠΌΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΏΡΡΠΌΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ MΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ³ΠΎ MVC, ΠΊΡΠ΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ, Π° Π²ΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Β«Π½Π°Π·Π°Π΄Β» ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ MVC Π² ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ Π² Objective-C, ΡΠ°ΠΊ ΠΈ Π² Swift.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC ΠΌΠ΅ΠΆΠ΄Ρ View ΠΈ Controller Π΄Π»Ρ ΠΈΡ Β Β«ΡΠ»Π΅ΠΏΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡΒ».
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Views β ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ±ΠΎΡΠ΅Π½Π½ΡΠ΅ (generic) ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΠΎ-ΡΠΎ Π·Π½Π°ΡΡ Π½ΠΈ ΠΎ ΠΊΠ»Π°ΡΡΠ΅, Π½ΠΈ ΠΎ Controller, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ. Views Π½Π΅ ΠΌΠΎΠ³ΡΡ Π²Π»Π°Π΄Π΅ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Controller. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² MΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ Controller ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΌ Π·Π° ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΆΠ΅ Β View ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Controller? Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ 6 ΡΠ°Π³ΠΎΠ², ΡΡΠΎΠ±Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ View ΠΈ Controller:
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠΎ, ΠΎ ΡΠ΅ΠΌ View Ρ ΠΎΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Controller ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΠ»ΡΡ)
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² View weak ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ delegate, ΡΠΈΠΏΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π² View ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ delegate, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅/ Π΄Π΅Π»Π°ΡΡ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ View Β Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π»Π°Π΄Π΅ΡΡ ΠΈΠ»ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ
- Controller ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ, ΡΡΠΎ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»
- Controller ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ self (ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ) ΠΊΠ°ΠΊ Π΄Π΅Π»Π΅Π³Π°ΡΠ° View ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΏΡΠ½ΠΊΡΠ΅ #2, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅
- Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π² Controller
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β Π½Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΠ°ΠΊ Π² Swift, ΡΠ°ΠΊ ΠΈ Π² Objective-C, ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ (Π±Π»ΠΎΠΊΠΎΠ²), ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π² SwiftΒ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΠΈΠ΄Π΅ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Β ΡΡΠ½ΠΊΡΠΈΠΈ (Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ) Π² Swift ΡΠ²Π»ΡΡΡΡΡ Β«Π³ΡΠ°ΠΆΠ΄Π°Π½Π°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Β», ΡΠΎ Π΅ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΎΡΡΠΎΡΠ° ΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½Π°Ρ ΡΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π² Swift ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (closures), Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π²ΡΡ MVC ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Controller ΠΈ ViewΒ Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π― Ρ ΠΎΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Ρ Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈ Π½Π° Π΄Π²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Π²Π·ΡΡΡΡ ΠΈΠ· ΡΡΡΠ½ΡΠΎΡΠ΄ΡΠΊΠΎΠ³ΠΎ ΠΊΡΡΡΠ° 2015 Β«Developing iOS 8 Apps with Swift» (ΡΡΡΡΠΊΠΈΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° iOS+Swift+Objective-C ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ»).
ΠΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΡΠ°ΡΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ View Β ΠΈ Controller Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC, Π° Π΄ΡΡΠ³ΠΎΠΉ β Π΄Π²ΡΡ
ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
MVC. Π ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Β Π·Π°Ρ
Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΠΌΠΈΒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠΈΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ².
Π ΠΠ°Π΄Π°Π½ΠΈΡΡ
ΡΡΡΠ½ΡΠΎΡΠ΄ΡΠΊΠΎΠ³ΠΎ ΠΊΡΡΡΠ° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ,
ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° iPad Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΎΡΡΠΎΡΡΠΈΠΌ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ: Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ RPN (ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΠΏΠΎΠ»ΡΡΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ) ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π½ΠΎ ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ M, Π·Π°Π΄Π°Π²Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠΡΠ°ΡΠΈΠΊ» Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΡΠ°Π½Π°. ΠΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Add to Favorites» ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Show Favorites«. Π ΡΠΏΠΈΡΠΊΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΡΡ ΡΡΠ½ΠΊΡΠΈΡ (ΡΠΈΡΡΠ½ΠΎΠΊ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅), ΠΈ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ. ΠΠΌΠ΅Ρ Π½Π°Π±ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΈΡ
Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅, Π½Π΅ ΠΏΡΠΈΠ±Π΅Π³Π°Ρ ΠΊ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΆΠ΅ΡΡ Swipe ( ΡΠΌΠ°Ρ
ΠΈΠ²Π°Π½ΠΈΡ) ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ.
Π― Π½Π΅ Π±ΡΠ΄Ρ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°, ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ Π½Π° ΡΠ°ΠΉΡΠ΅ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° iOS+Swift+Objective-C ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». ΠΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ, ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ UIView ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ΅ y= f(x) ΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Controller, ΠΈ ΠΊΠ°ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Table View, ΠΏΠΎΡΠ²Π»ΡΡΡΠΈΠΉΡΡ Π² ΠΎΠΊΠΎΡΠΊΠ΅ Popover, Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Controller Π΄ΡΡΠ³ΠΎΠ³ΠΎ MVC ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ Π³ΡΠ°ΡΠΈΠΊ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ΅ MVC, ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Β«ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΒ», ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½ΠΈΠΆΠ΅
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Split View Controller, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ»Ρ Master ΡΡΠΎΡΠΎΠ½Ρ ΠΈΠ³ΡΠ°Π΅Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠΏΠ° y= f(x), Π° ΡΠΎΠ»Ρ Detail ΠΈΠ³ΡΠ°Π΅Ρ ΠΡΠ°ΡΠΈΠΊ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ y= f(x). ΠΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ Detail ΡΡΠΎΡΠΎΠ½Π° Split View Controller, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ», Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ View ΠΈ Controller Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC, ΠΈ MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ», Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ».
ΠΠ°Ρ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ View ΠΈ Controller Π² ΠΎΠ΄Π½ΠΎΠΌ MVC.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° MVC Β«ΠΡΠ°ΡΠΈΠΊΒ», ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ FavoritesGraphViewController.
ΠΡΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ FavoritesGraphViewController Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° GraphViewController ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ favoritePrograms, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°. ΠΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ ΡΠΊΡΡΡΠ° Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ GraphViewController. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π² ΡΡΠ°ΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ GraphViewController, Π° ΠΊ ΠΊΠ»Π°ΡΡΡ FavoritesGraphViewController ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΈΠ΅ΠΌ Π² iOS ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΡΠΎΠ½ΡΡΡΠΌ, Π° Π²ΡΠ΅ Β«ΡΠ°ΡΡΠ½ΠΎΡΡΠΈΒ» Π²Π½ΠΎΡΡΡΡΡ Π² Π΅Π³ΠΎ subclass. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡ Π΅ΠΌΠ° Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π²ΠΈΠ΄:
Π’ΠΎ Π΅ΡΡΡ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ GraphViewController, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° program RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠ° ( ΡΡΠΎ MΠΎΠ΄Π΅Π»Ρ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ»).
View ΡΡΠΎΠ³ΠΎ MVC ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ UIView, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡΠΎΠΌ GraphView.
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π·Π°Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ GraphView, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΡΡΠΎΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ y = f(x). ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ΅, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ y = f(x) ΠΈ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ . Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π² Π½Π°ΡΠ΅ΠΌ Controller, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ GraphViewController, ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ΅ y = f(x), Π½ΠΎ Π½Π΅ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ program, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ brain RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°.
ΠΠΌΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ y c ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° brain Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ program
ΠΠ°ΠΊ ΡΠ²ΡΠ·Π°ΡΡ ΡΡΠΈ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° β GraphView ΠΈ GraphViewController, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ? Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² Objective-C, ΡΠ°ΠΊ ΠΈ Π² Swift β ΡΡΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ± ΡΡΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° Swift ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠΎΡΡΠ΅ Β«ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3. Π Π΅ΡΠ΅Π½ΠΈΠ΅ -ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡΒ».
ΠΡ ΠΈΠ·Π±ΡΠ°Π»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΡΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (closures), Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ GraphView ΠΈ GraphViewController.
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡ GrapherView ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ yForX ΠΊΠ°ΠΊ public (not private), ΡΡΠΎΠ±Ρ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π² GrapherViewController
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Optional ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ yForX, Π½Π°ΡΠΈΡΡΠ΅ΠΌ Π³ΡΠ°ΡΠΈΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ GrapView:
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Optionals Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Optional, ΡΡΠ½ΠΊΡΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΠΊ ? Π²ΠΎΠΏΡΠΎΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ.
Π GraphViewController Π² ΠΠ°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Π΅ didSet { } Π‘Π²ΠΎΠΉΡΡΠ²Π° GraphView! , ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ @IBOutlet, ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ yForX ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ Π·Π°Ρ
Π²Π°ΡΠΈΠ»ΠΎ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ self.brain, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½ΡΠΆΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° program Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ yForX Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Β«Π·Π°Ρ
Π²Π°ΡΠ΅Π½Π½ΡΠΉΒ» ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, Π° ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ.
ΠΡΠ΅. ΠΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ², Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ², Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ². ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Β«Π·Π°Ρ Π²Π°ΡΠ°Β» [unowned self ] Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠ»ΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ (ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΠ΅ΠΊΡΠΈΠΈ 9 ΠΊΡΡΡΠ° Β«Developing iOS 8 Apps with SwiftΒ»).
ΠΠΎΠ΄ Π½Π° Github.
ΠΠ°Ρ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Π΄Π²ΡΡ MVC.
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π΄Π»Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ subclass ΠΊΠ»Π°ΡΡΠ° GraphViewController, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π°Π·Π²Π°Π»ΠΈ FavoritesGraphViewController. Π ΡΠ΅ΠΏΠ΅ΡΡ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ», ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ FavoritesGraphViewController.
Π ΡΡΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ FavoritesGraphViewController Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ favoritePrograms, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° ΠΈ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ NSUserDefaults. ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Add to Favorites«. Π ΠΌΠ°ΡΡΠΈΠ²Ρ favoritePrograms Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° program
ΠΠ»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ MVC β MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ». ΠΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ Table View Controller, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ FavoriteTableViewController. Β«ΠΠ΅ΡΠ΅Π΅Π·Π΄Β» Π½Π° MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ» ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Show Favorites«, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° MVC Β«ΠΡΠ°ΡΠΈΠΊΒ», Ρ ΠΏΠΎΠΌΠΎΡΡΡ segue ΡΠΈΠΏΠ° Β«Present as PopoverΒ».
ΠΠΎΠ΄Π΅Π»ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° FavoriteTableViewController ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅.
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Table View DataSource
Π ΡΡΠ°Π·Ρ ΠΆΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π² ΡΡΡΠΎΠΊΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π½Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°, Π° Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π² Β«ΡΠΈΠ²ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ½ΡΠΈΠΊΡΠ½ΠΎΠΌΒ» Π²ΠΈΠ΄Π΅, Π²Π΅Π΄Ρ Π½Π°Ρ MVC Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ». ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ».
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡ FavoriteTableViewController ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ descriptionProgram, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠΉ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π½Π° Π²Ρ
ΠΎΠ΄Π΅ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
- FavoriteTableViewController β ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄
- index β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ favoritePrograms, ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΡΠΈΠΊΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Optional ΡΡΡΠΎΠΊΠ° c ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ:
ΠΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Β«ΠΏΠ΅ΡΠ΅Π΅Π·Π΄ΡΒ» Π½Π° MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ» Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ prepareForSegue
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ descriptionProgram Π·Π°Ρ Π²Π°ΡΠΈΡ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅.
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈ ΠΊΠ»Π°ΡΡΡ FavoriteTableViewController. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°Ρ
ΠΎΠ΄ΡΡΠ΅ΠΌΡΡ Π² ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ NSUserDefaults. ΠΡΠ΅ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» . ΠΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡ FavoriteTableViewController Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ didSelect ΠΈ didDelete, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΡΡ
β ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π½Π° Π²Ρ
ΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ descriptionProgram, Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
- FavoriteTableViewController β ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄
- index β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ favoritePrograms, ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΡΠΈΠΊΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ:
ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π΅Π»Π΅Π³Π°ΡΠ° didSelectRowAtIndexPath ΠΈ commitEditingStyleβ¦ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ:
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ didSelect ΠΈ didDelete ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Ρ Π½Π° MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ» Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ prepareForSegue:
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ didSelect Π·Π°Ρ Π²Π°ΡΠΈΡ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ program, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° ΠΈΠ·Π²Π½Π΅, ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π΅Π΅, ΡΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ Π³ΡΠ°ΡΠΈΠΊ. Π ΡΡΠΎΠΌ ΠΆΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ±ΡΠ°ΡΡ Popover ΠΎΠΊΠ½ΠΎ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠΊΡΠ°Π½Π° (Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΡΠΎ ΡΡΡΠΎΠΊΠΈ controller.dismissControlerAnimated…) ΠΈΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ didDelete Π·Π°Ρ
Π²Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ favoritePrograms, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ NSUserDefaults, ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΊΠ°ΠΊ MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΌ Π΅Π³ΠΎ MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΡΠΌΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ΄Π΅ ΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΠΎΠ΄Π΅Π»Ρ programs Π΄Π»Ρ MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ»? ΠΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΅Π΅ Π² MVC Β«ΠΡΠ°ΡΠΈΠΊΒ» Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Ρ Π½Π° MVC Β«Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉΒ» Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π΅ prepareForSegue
ΠΡΠ°ΠΊ, ΡΡ
Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ MVC ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ.
ΠΠ½Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 3-Ρ
ΡΠ°Π³ΠΎΠ²:
- Π MVC, ΡΡΠ΅Π±ΡΡΡΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ public ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΅Π΅ Π² ΡΠΎΠΌ ΠΆΠ΅ MVC
- Π Π΄ΡΡΠ³ΠΎΠΌ MVC ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ ΡΡΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π² ΠΠ°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Π΅ Π‘Π²ΠΎΠΉΡΡΠ² didSet {}, Π»ΠΈΠ±ΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ prepareForSegue, Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅ Π³Π΄Π΅-ΡΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Β«Π·Π°Ρ Π²Π°ΡΠΈΠ»ΠΎΒ» Π½ΡΠΆΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
ΠΡΠ΅.
ΠΠΈΠΊΠ°ΠΊΠΈΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² β ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ².
ΠΠΎΠ΄ Π½Π° Github.
ΠΠ° iPhone ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° Π΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ Split View Controller, Π° Navigation Controller, ΠΈ Π²Ρ ΠΎΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ MVC ΠΊΠ°ΠΊ Π² ΠΏΡΡΠΌΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΏΡΡΠΌΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ MΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ³ΠΎ MVC, ΠΊΡΠ΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ. ΠΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Β«Π½Π°Π·Π°Π΄Β» ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ MVC Π² ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ MVC ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π² Swift Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ.
ΠΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ MVC Π΄Π»Ρ βΡΠ»Π΅ΠΏΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡβ ΠΌΠ΅ΠΆΠ΄Ρ View ΠΈ Controller. ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠ±ΡΠ°ΡΠ°Ρ Π²Π°ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° Π² ΡΡΡΠ½ΡΠΎΡΠ΄ΡΠΊΠΈΡ ΠΊΡΡΡΠ°Ρ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈ Π²ΡΠ²ΠΎΠ΄ ΡΠΏΠΈΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌΠΈ (generic), Π½Π΅ Π·Π½Π°ΡΡΠΈΠΌΠΈ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ β Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ (generic) Π²ΠΈΠ΄, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² GraphView ΠΈ FavoriteTableViewController.
Π‘ΡΡΠ»ΠΊΠΈ
Π‘ΡΡΠ½ΡΠΎΡΠ΄ΡΠΊΠΈΠΉ ΠΊΡΡΡ 2015 Β«Developing iOS 8 Apps with SwiftΒ»Β
Π ΡΡΡΠΊΠΈΠΉ Π½Π΅Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠΏΠ΅ΠΊΡ Π»Π΅ΠΊΡΠΈΠΉ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΠ°Π΄Π°Π½ΠΈΠΉ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° iOS+Swift+Objective-C ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ»
Π’Π΅ΠΊΡΡ ΠΠ°Π΄Π°Π½ΠΈΡ 3 Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° iTunes Π² ΠΏΡΠ½ΠΊΡΠ΅ βDeveloping iOS 8 app: Programming: Project 3β³.
Π’Π΅ΠΊΡΡ ΠΠ°Π΄Π°Π½ΠΈΡ 3 Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° Β«ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3 iOS 8.pdfΒ»
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΠ°Π΄Π°Π½ΠΈΡ 3 Β«ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΒ» Ρ Π½ΡΠ»Ρ.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3 cs193p ΠΠΈΠΌΠ° 2015 ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3 cs193p ΠΠΈΠΌΠ° 2015 ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ β Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ 1, 2 ΠΈ 3
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3. Π Π΅ΡΠ΅Π½ΠΈΠ΅ β Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ 4, 5 ΠΈ 6. ΠΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅.
ΠΠΎΠ΄ Π½Π° Github.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠΎΠΌ, ΡΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ RPN ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ sin (1/M) Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ Π½Π° ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
1 β΅ M Γ· sin ΠΊΠ½ΠΎΠΏΠΊΠ° Β«ΠΡΠ°ΡΠΈΠΊΒ» Π΄Π°Π΅Ρ sin (1/M)
M cos M Γ ΠΊΠ½ΠΎΠΏΠΊΠ° Β«ΠΡΠ°ΡΠΈΠΊΒ» Π΄Π°Π΅Ρ cos(M)*M
M β΅ 1 β΅ M sin + Γ ΠΊΠ½ΠΎΠΏΠΊΠ° Β«ΠΡΠ°ΡΠΈΠΊΒ» Π΄Π°Π΅Ρ M * ( 1 +sin (M))