рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░: рд╕реНрд╡рд┐рдлреНрдЯ рдХреНрдпреВ рдПрдВрдб рдП

рд╕реНрд╡рд┐рдлреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗрд╡рд▓ рдЪрд╛рд░ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рднрд╛рд╖рд╛ рдмрди рд░рд╣реА рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 5.0 рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░, рд╕реНрд╡рд┐рдлреНрдЯ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднрд╛рд╖рд╛ рдмрди рдЧрдИ рд╣реИ рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдорд╛рди рджреЛрдиреЛрдВ рд╕реЗ рдорд┐рд▓рддреА рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдкреНрд░рд╢реНрди рдорд┐рд▓реЗрдВрдЧреЗред

рдЖрдк рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрддреНрддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ: рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рд╣реИред

рдкреНрд░рд╢реНрди рддреАрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ:

  • рд╢реБрд░реБрдЖрддреА : рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдПред рдЖрдкрдиреЗ рдХреБрдЫ рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
  • рдордзреНрдпрд╡рд░реНрддреА : рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • рдЙрдиреНрдирдд : рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд - рдЬреЛ рд▓реЛрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрдирдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  • рд▓рд┐рдЦрд┐рдд : рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред
  • рдореМрдЦрд┐рдХ : рдлреЛрди рдкрд░ рдпрд╛ рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЙрддреНрддрд░ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЛ рдЦреБрд▓реЗ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдкреНрд░рд╢реНрди рд╕реЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВред рд╕рднреА рдЙрддреНрддрд░реЛрдВ рдХреЛ Xcode 10.2 рдФрд░ Swift 5 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рд╢реБрд░реБрдЖрддреА


    рд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

    struct Tutorial { var difficulty: Int = 1 } var tutorial1 = Tutorial() var tutorial2 = tutorial1 tutorial2.difficulty = 2 

    Tutorial1.difficulty рдФрд░ tutorial2.difficulty рдХреЗ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИрдВ? рдЕрдЧрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреНрд▓рд╛рд╕ рд╣реЛрддрд╛ рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдВрддрд░ рд╣реЛрддрд╛? рдХреНрдпреЛрдВ?

    рдЬрд╡рд╛рдм
    tutorial1.difficulty 1 рд╣реИ, рдФрд░ tutorial2.difficulty 2 рд╣реИред

    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, рд╕рдВрд░рдЪрдирд╛рдПрдВ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 1 рдХреЛ рдХреЙрдкреА рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 2 рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреА рд╣реИ:

     var tutorial2 = tutorial1 

    Tutorial2 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 1 рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

    рдпрджрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдПрдХ рд╡рд░реНрдЧ рдерд╛, tutorial1.difficulty рдФрд░ tutorial2.difficulty рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреЗ 2. рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдЬрдм рдЖрдк tutorial1 рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 2 рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВрдЧреЗ - рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред


    рдкреНрд░рд╢реНрди реи
    рдЖрдкрдиреЗ var 1 рдФрд░ view2 рдХреЛ let рдХреЗ рд╕рд╛рде view1 рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╕рдВрдХрд▓рд┐рдд рд╣реИ?

     import UIKit var view1 = UIView() view1.alpha = 0.5 let view2 = UIView() view2.alpha = 0.5 //   ? 

    рдЬрд╡рд╛рдм
    рд╣рд╛рдВ, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╕рдВрдХрд▓рд┐рдд рд╣реИред рд╡реНрдпреВ 1 рдПрдХ рдЪрд░ рд╣реИ, рдФрд░ рдЖрдк рдпреВрдЖрдИрд╡реАрд╡рд╛рдИрдИ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

     view2 = view1 // : view2 is immutable 

    рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреВрдЖрдИрд╡рд╛рдИрдИрд╡рд╛рдИ рдПрдХ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡реНрдпреВ 2 рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдб рд╕рдВрдХрд▓рди рд╣реЛрдЧрд╛ред

    рдкреНрд░рд╢реНрди 3
    рдпрд╣ рдХреЛрдб рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдмрдВрдж рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВред

     var animals = ["fish", "cat", "chicken", "dog"] animals.sort { (one: String, two: String) -> Bool in return one < two } print(animals) 

    рдЬрд╡рд╛рдм
    рд╕реНрд╡рд┐рдлреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓реЛрдЬрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ :

     animals.sort { (one, two) in return one < two } 

    рдЖрдк $ i рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

     animals.sort { return $0 < $1 } 

    рдПрдХрд▓ рд╡рд┐рд╡рд░рдг рд╡рд╛рд▓реЗ рдХреНрд▓реЛрдЬрд╝рд░ рдореЗрдВ рд╡рд╛рдкрд╕реА рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг рдХрд╛ рдореВрд▓реНрдп рдХреНрд▓реЛрдЬрд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рдкрд░рд┐рдгрд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИ:

     animals.sort { $0 < $1 } 

    рдЕрдВрдд рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдЗрдХреНрд╡рд┐рдЯреЗрдмрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдЖрдк рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

     animals.sort(by: <) 


    рдЕрджреНрдпрддрди: рдЪрд┐рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдФрд░ рднреА рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛:
    рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рднреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
      animals.sort() 
    - рдЖрд░реЛрд╣реА рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреБрд▓рдиреАрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди 4
    рдпрд╣ рдХреЛрдб рджреЛ рд╡рд░реНрдЧреЛрдВ рдмрдирд╛рддрд╛ рд╣реИ: рдкрддрд╛ рдФрд░ рд╡реНрдпрдХреНрддрд┐ ред рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ ( рд░реЗ рдФрд░ рдмреНрд░рд╛рдпрди ) рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рднреА рдмрдирд╛рдП рдЧрдП рд╣реИрдВред

     class Address { var fullAddress: String var city: String init(fullAddress: String, city: String) { self.fullAddress = fullAddress self.city = city } } class Person { var name: String var address: Address init(name: String, address: Address) { self.name = name self.address = address } } var headquarters = Address(fullAddress: "123 Tutorial Street", city: "Appletown") var ray = Person(name: "Ray", address: headquarters) var brian = Person(name: "Brian", address: headquarters) 

    рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдмреНрд░рд╛рдпрди рдПрдХ рдирдП рдкрддреЗ рдкрд░ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдирдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

     brian.address.fullAddress = "148 Tutorial Street" 

    рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЕрдм рд░реЗ рдХрд╛ рдкрддрд╛ рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡рд╣ рднреА "рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд" рд╣реЛ рдЧрдпрд╛ рд╣реИ ред

    рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реБрдЖ рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

    рдЬрд╡рд╛рдм
    рдкрддрд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрджрд░реНрдн рд╢рдмреНрджрд╛рд░реНрде рд╣реИ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореБрдЦреНрдпрд╛рд▓рдп рдХрд┐рд░рдг рдФрд░ рдмреНрд░рд╛рдпрди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИред рдореБрдЦреНрдпрд╛рд▓рдп рдмрджрд▓рдиреЗ рд╕реЗ рджреЛрдиреЛрдВ рдХрд╛ рдкрддрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
    рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдпрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдпрд╛ рдкрддреЗ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

    рдореМрдЦрд┐рдХ рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ?

    рдЬрд╡рд╛рдм
    рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЛ " рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ " рд╕реНрдерд┐рддрд┐ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, "рдиреЛ рд╡реИрд▓реНрдпреВ" рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдирд┐рд▓ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░, рдЬреИрд╕реЗ рдХрд┐ рдЗрдВрдЯ рдпрд╛ рдлреНрд▓реЛрдЯ , рдореЗрдВ рдпрд╣ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рдереАред
    рд╕реНрд╡рд┐рдлреНрдЯ рдиреЗ "рдиреЛ рд╡реИрд▓реНрдпреВ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд░ рдореЗрдВ рдПрдХ рдорд╛рди рдпрд╛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рдПрдХ рдореВрд▓реНрдп рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди реи
    рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд░реНрдЧ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░реЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред

    рдЬрд╡рд╛рдм
    рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛рдПрдВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред
    рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рд╕рдВрд░рдЪрдирд╛рдПрдВ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВред


    рдкреНрд░рд╢реНрди 3
    рдЬреЗрдирд░рд┐рдХ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВ?

    рдЬрд╡рд╛рдм
    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдЧрдгрдирд╛ рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛрдб рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдореЗрдВ рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдХрд╛ "рдХреНрд▓реЛрди" рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВред

     func areIntEqual(_ x: Int, _ y: Int) -> Bool { return x == y } func areStringsEqual(_ x: String, _ y: String) -> Bool { return x == y } areStringsEqual("ray", "ray") // true areIntEqual(1, 1) // true 

    рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

     func areTheyEqual<T: Equatable>(_ x: T, _ y: T) -> Bool { return x == y } areTheyEqual("ray", "ray") areTheyEqual(1, 1) 

    рдЪреВрдВрдХрд┐ рдЖрдк рд╕рдорд╛рдирддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдпрд╣ рдХреЛрдб рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди 4
    рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдирд┐рд╣рд┐рдд рдЕрд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрдм рдФрд░ рдХреНрдпреЛрдВ?

    рдЬрд╡рд╛рдм
    рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓рд┐рдЦрд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рд╣реИрдВ:

    • рдЬрдм рдЖрдк рдПрдХ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдкрд░ рдЖрдЙрдЯрд▓реЗрдЯ рд╣реИ , рдЬреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрд▓реЗрдЯ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИред
    • рдордЬрдмреВрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓реВрдк рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рд╕реЗ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдПрдХ рддрд░рдл рд▓рд┐рдВрдХ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


    рдкреНрд░рд╢реНрди 5
    рд╡реИрдХрд▓реНрдкрд┐рдХ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВ? рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░реЗрдЯ рдХрд░реЗрдВред

     var x : String? = "Test" 

    рд╕рдВрдХреЗрдд: рдХреЗрд╡рд▓ 7 рддрд░реАрдХреЗред

    рдЬрд╡рд╛рдм
    рдЬрдмрд░рди рдЕрд▓рд┐рдЦрд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     let a: String = x! 

    рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд╣рд┐рдд рддреИрдирд╛рддреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     var a = x! 

    рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдВрдзрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     if let a = x { print("x was successfully unwrapped and is = \(a)") } 

    рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     let a = x?.count 

    рдирд┐рд▓ coalescing рд╕рдВрдЪрд╛рд▓рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     let a = x ?? "" 

    рдЧрд╛рд░реНрдб рдХрд╛ рдмрдпрд╛рди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

     guard let a = x else { return } 

    рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрдЯрд░реНрди - рд╕реБрд░рдХреНрд╖рд┐рддред

     if case let a? = x { print(a) } 




  • рдордзреНрдпрдо


    рд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рдиреАрд▓ рдФрд░ .none рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?

    рдЬрд╡рд╛рдм
    рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, Optional.none (рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ .none ) рдФрд░ nil рд╕рдорддреБрд▓реНрдп рд╣реИрдВред
    рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рд╕рддреНрдп рд╣реЛрдЧрд╛:

     nil == .none 


    рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред


    рдкреНрд░рд╢реНрди реи
    рдпрд╣рд╛рдБ рд╡рд░реНрдЧ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдерд░реНрдорд╛рдореАрдЯрд░ рдореЙрдбрд▓ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдЦрд┐рд░реА рд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?

     public class ThermometerClass { private(set) var temperature: Double = 0.0 public func registerTemperature(_ temperature: Double) { self.temperature = temperature } } let thermometerClass = ThermometerClass() thermometerClass.registerTemperature(56.0) public struct ThermometerStruct { private(set) var temperature: Double = 0.0 public mutating func registerTemperature(_ temperature: Double) { self.temperature = temperature } } let thermometerStruct = ThermometerStruct() thermometerStruct.registerTemperature(56.0) 

    рдЬрд╡рд╛рдм
    рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдерд░реНрдорд╛рдореАрдЯрд░рд╕реНрдЯреНрд░рдХреНрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдЯреЗрдВрдкрд░реЗрдЪрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рд╡рд░реНрдЬрди рдХреЛ рд▓реЗрдЯ рдЪреЗрдВрдЬ рдХрд░рдиреЗ рд╕реЗ рдХрдВрдкрд▓реАрд╢рди рдПрд░рд░ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛

    рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдХреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


    рдкреНрд░рд╢реНрди 3
    рдпрд╣ рдХреЛрдб рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреНрдпреЛрдВ?

     var thing = "cars" let closure = { [thing] in print("I love \(thing)") } thing = "airplanes" closure() 


    рдЬрд╡рд╛рдм
    рдпрд╣ рдЫрдкрд╛ рд╣реЛрдЧрд╛: рдореБрдЭреЗ рдХрд╛рд░реЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИред рдмрдВрдж рд╣реЛрдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рд╣реЛрдиреЗ рдкрд░ рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдЪрд░ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдЧреАред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрд░рд┐рдПрдмрд▓ рдирдпрд╛ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред

    рдпрджрд┐ рдЖрдк рдмрдВрдж рд╕реВрдЪреА рдореЗрдВ рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдХреЙрдкреА рдХрд╛ред рдХреНрд▓реЛрдЬрд░ рдХреЙрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд░реНрд╢рд╛рдПрдЧрд╛:

     var thing = "cars" let closure = { print("I love \(thing)") } thing = "airplanes" closure() // Prints: "I love airplanes" 



    рдкреНрд░рд╢реНрди 4
    рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ:

     func countUniques<T: Comparable>(_ array: Array<T>) -> Int { let sorted = array.sorted() let initial: (T?, Int) = (.none, 0) let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) } return reduced.1 } 

    рдпрд╣ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддреБрд▓рдирд╛рддреНрдордХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред

    рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ:

     countUniques([1, 2, 3, 3]) //  3 


    рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдПрд░рд┐рдпрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ:

     [1, 2, 3, 3].countUniques() //   3 


    рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ
    рдХреБрдЫ рджрд░реНрджрдирд╛рдХ рднреА рдПрдХ рд░рд╛рдХреНрд╖рд╕реА рдХрд╛рд░реНрдп рд╣реИред рдХреНрдпреЛрдВ рдирд╣реАрдВ:

     func countUniques<T: Hashable>(_ array: Array<T>) -> Int { return Set(array).count } 


    рдЬрд╡рд╛рдм
     extension Array where Element: Comparable { func countUniques() -> Int { let sortedValues = sorted() let initial: (Element?, Int) = (.none, 0) let reduced = sortedValues.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) } return reduced.1 } } 



    рдкреНрд░рд╢реНрди 5
    рдпрд╣рд╛рдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдпреБрдЧрд▓ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рддреАрди рд╢рд░реНрддреЗрдВ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
    • рд▓рд╛рднрд╛рдВрд╢ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
    • рднрд╛рдЬрдХ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
    • рднрд╛рдЬрдХ 0 рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП


     func divide(_ dividend: Double?, by divisor: Double?) -> Double? { if dividend == nil { return nil } if divisor == nil { return nil } if divisor == 0 { return nil } return dividend! / divisor! } 

    рдЧрд╛рд░реНрдб рдХреЗ рдмрдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЬрдмрд░рди рдЕрд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдХреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред
    рдЬрд╡рд╛рдм
    рд╕реНрд╡рд┐рдлреНрдЯ 2.0 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ, рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

     guard dividend != nil else { return nil } 


    рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡реЗрд░рд┐рдПрдмрд▓ рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛:

     guard let dividend = dividend else { return .none } 


    рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

     func divide(_ dividend: Double?, by divisor: Double?) -> Double? { guard let dividend = dividend else { return nil } guard let divisor = divisor else { return nil } guard divisor != 0 else { return nil } return dividend / divisor } 

    рдордЬрдмреВрд░ рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рднрд╛рдВрд╢ рдФрд░ рдбрд┐рд╡рд┐рдЬрд╝рди рдХреЛ рдЕрдирдкреИрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЪрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИред

    рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЕрдирдкреИрдХреНрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рд╣рд░ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред

    рдЖрдк рдЧрд╛рд░реНрдб рдХрдердиреЛрдВ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдХреЗ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдФрд░ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

     func divide(_ dividend: Double?, by divisor: Double?) -> Double? { guard let dividend = dividend, let divisor = divisor, divisor != 0 else { return nil } return dividend / divisor } 



    рдкреНрд░рд╢реНрди 6
    рдпрджрд┐ рд▓реЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╢реНрди 5 рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред

    рдЬрд╡рд╛рдм
    рдпрджрд┐ рдЖрдЗрдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЗ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд╣рд░, рдпреЗ рдореВрд▓реНрдп рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

     func divide(_ dividend: Double?, by divisor: Double?) -> Double? { if let dividend = dividend, let divisor = divisor, divisor != 0 { return dividend / divisor } else { return nil } } 




    рдореМрдЦрд┐рдХ рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

     const int number = 0; 

    рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ:

     let number = 0 

    рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?

    рдЬрд╡рд╛рдм
    рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

    рдЪрд▓реЛ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдп рд░рди рд╕рдордп рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

     let higherNumber = number + 5 


    рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдРрд╕рд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди реи
    рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рд░ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

     struct Sun { static func illuminate() {} } 

    рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдпрд╛ рд╡рд░реНрдЧ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдВрддрд░ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХреАрдЬрд┐рдПред

    рдЬрд╡рд╛рдм
    рд╕реНрдереИрддрд┐рдХ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдХрд╛рд░реНрдп рдХреЛ рд╕реНрдерд┐рд░ рдФрд░ рдЧреИрд░-рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдмрдирд╛рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдХрд╛рд░реНрдп рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ ред

    рдпрд╣рд╛рдБ рд╕рдВрдХрд▓рдХ рдХреЛ рд░реЛрд╢рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╢рдкрде рд▓реЗрдВрдЧреЗ () :

     class Star { class func spin() {} static func illuminate() {} } class Sun : Star { override class func spin() { super.spin() } // error: class method overrides a 'final' class method override static func illuminate() { super.illuminate() } } 



    рдкреНрд░рд╢реНрди 3
    рдХреНрдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдХреИрд╕реЗ рдпрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

    рдЬрд╡рд╛рдм
    рдирд╣реАрдВ, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рдо рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╕реНрд╡рдпрдВ рдпрд╛ рдЙрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдирдИ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди 4
    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрдпрд╛ рд╣реИ?

    рдЬрд╡рд╛рдм
    рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ, рдЧреБрдгреЛрдВ рдЖрджрд┐ рдХреА рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд░реНрдЧ, рд╕рдВрд░рдЪрдирд╛, рдпрд╛ рдЧрдгрдирд╛ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред



  • рдЙрдиреНрдирдд


    рд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдерд░реНрдорд╛рдореАрдЯрд░ рдХреЗ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ:

     public struct Thermometer { public var temperature: Double public init(temperature: Double) { self.temperature = temperature } } 

    рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

     var t: Thermometer = Thermometer(temperature:56.8) 

    рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛:

     var thermometer: Thermometer = 56.8 

    рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ? рдХреИрд╕реЗ?

    рдЬрд╡рд╛рдм
    рд╕реНрд╡рд┐рдлреНрдЯ рдЙрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░рдореНрднрд┐рдХ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдерд░реНрдорд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо ExpressibleByFloatLiteral рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

     extension Thermometer: ExpressibleByFloatLiteral { public init(floatLiteral value: FloatLiteralType) { self.init(temperature: value) } } 


    рдЕрдм рд╣рдо рдЗрд╕ рддрд░рд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

     var thermometer: Thermometer = 56.8 



    рдкреНрд░рд╢реНрди реи
    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдПрдХрд╛рддреНрдордХ рдФрд░ рдмрд╛рдЗрдирд░реАред

    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдСрдкрд░реЗрдЯрд░ (^ ^) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ:
    • рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ int рд▓реЗрддрд╛ рд╣реИ
    • рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдХреА рд╢рдХреНрддрд┐ рддрдХ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ
    • рдмреАрдЬреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХреНрд░рдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ
    • рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ


    рдЬрд╡рд╛рдм
    рдПрдХ рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рдШреЛрд╖рдгрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

    рдШреЛрд╖рдгрд╛ рдирдП (рдСрдкрд░реЗрдЯрд░ рдпрд╛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА) рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рд╕рдВрдЧрддрд┐ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреВрд░реНрд╡рддрд╛ред

    рдпрд╣рд╛рдБ рдСрдкрд░реЗрдЯрд░ ^ ^ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ infix (рдмрд╛рдЗрдирд░реА) рд╣реИред рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╕рд╣реА рд╣реИред

    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдШрд╛рддрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд░рд┐рд╖реНрдарддрд╛ рдирд╣реАрдВ рд╣реИред рдмреАрдЬрдЧрдгрд┐рдд рдореЗрдВ, рдШрд╛рддрд╛рдВрдХ / рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдкрд╣рд▓реЗ рдШрд╛рддрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХреНрд╕рдлреЛрд▓рд┐рдПрд╢рди рдХреЛ рдЧреБрдгрди рд╕реЗ рдЕрдзрд┐рдХ рд░рдЦрддреЗ рд╣реБрдП рдХрд╕реНрдЯрдо рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВред

    рдпрд╣ рдШреЛрд╖рдгрд╛:

     precedencegroup ExponentPrecedence { higherThan: MultiplicationPrecedence associativity: right } infix operator ^^: ExponentPrecedence 


    рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

     func ^^(base: Int, exponent: Int) -> Int { let l = Double(base) let r = Double(exponent) let p = pow(l, r) return Int(p) } 



    рдкреНрд░рд╢реНрди 3
    рдирд┐рдореНрди рдХреЛрдб рдореЗрдХрдореЗрд░реНрдЧрд┐рдЯрд╛ () рд╡рд┐рдзрд┐ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдкрд┐рдЬреНрдЬрд╛ рдФрд░ рдкрд┐рдЬрд╝реНрдЬрд╝реЗрд░рд┐рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

     struct Pizza { let ingredients: [String] } protocol Pizzeria { func makePizza(_ ingredients: [String]) -> Pizza func makeMargherita() -> Pizza } extension Pizzeria { func makeMargherita() -> Pizza { return makePizza(["tomato", "mozzarella"]) } } 


    рдЕрдм рд╣рдо рд▓реЛрдореНрдмрд╛рд░реНрдбреАрд╕ рд░реЗрд╕реНрддрд░рд╛рдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

     struct Lombardis: Pizzeria { func makePizza(_ ingredients: [String]) -> Pizza { return Pizza(ingredients: ingredients) } func makeMargherita() -> Pizza { return makePizza(["tomato", "basil", "mozzarella"]) } } 

    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓реЛрдореНрдмрд╛рд░реНрдбреАрд╕ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рддреБрд▓рд╕реА рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдЧрд░реАрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ?

     let lombardis1: Pizzeria = Lombardis() let lombardis2: Lombardis = Lombardis() lombardis1.makeMargherita() lombardis2.makeMargherita() 


    рдЬрд╡рд╛рдм
    рджреЛрдиреЛрдВ рдореЗрдВред рдкрд┐рдЬрд╝реНрдЬрд╝реЗрд░рд┐рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдХрдореЗрд░реНрдЧрд┐рдЯрд╛ () рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЛрдореНрдмрд╛рд░реНрдбреАрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

    рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдХрдореЗрд░реНрдЧрд┐рдЯрд╛ () рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЕрднреА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣:

     protocol Pizzeria { func makePizza(_ ingredients: [String]) -> Pizza } extension Pizzeria { func makeMargherita() -> Pizza { return makePizza(["tomato", "mozzarella"]) } } 

    рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЗрд╡рд▓ lombardis2 рдореЗрдВ рддреБрд▓рд╕реА рдХреЗ рд╕рд╛рде рдкрд┐рдЬрд╝реНрдЬрд╝рд╛ рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ lombardis1 рдореЗрдВ рдХреЛрдИ рдкрд┐рдЬрд╝реНрдЬрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред


    рдкреНрд░рд╢реНрди 4
    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛рдПрдВред

     struct Kitten { } func showKitten(kitten: Kitten?) { guard let k = kitten else { print("There is no kitten") } print(k) } 

    рд╕рдВрдХреЗрдд: рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВред


    рдЬрд╡рд╛рдм
    рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХреНрдЬрд╝рд┐рдЯ рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рддреЛ рд░рд┐рдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдпрд╛ @noreturn рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрд╛рдп рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реИред

     func showKitten(kitten: Kitten?) { guard let k = kitten else { print("There is no kitten") return } print(k) } 

    рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛:

     enum KittenError: Error { case NoKitten } struct Kitten { } func showKitten(kitten: Kitten?) throws { guard let k = kitten else { print("There is no kitten") throw KittenError.NoKitten } print(k) } try showKitten(kitten: nil) 


    рдЕрдВрдд рдореЗрдВ, рдпрд╣рд╛рдБ fatalError () , @noreturn рдлрдВрдХреНрд╢рди рд╣реИред

     struct Kitten { } func showKitten(kitten: Kitten?) { guard let k = kitten else { print("There is no kitten") fatalError() } print(k) } 




    рдореМрдЦрд┐рдХ рдкреНрд░рд╢реНрди
    рдкреНрд░рд╢реНрди 1
    рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдпрд╛ рдорд╛рди рдкреНрд░рдХрд╛рд░ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

    рдЬрд╡рд╛рдм
    рдХреНрд▓реЛрдЬрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рджреВрд╕рд░реЗ рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕реА рдХреНрд▓реЛрдЬрд░ рдФрд░ рдЙрд╕рдХреА рдХреИрдкреНрдЪрд░ рд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред


    рдкреНрд░рд╢реНрди реи
    рдЖрдк рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UInt рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирд┐рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

     init(_ value: Int) 

    рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

     let myNegative = UInt(-1) 

    рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛, рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЛрдгрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

    рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдореИрдВ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ UInt рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ?

    рдЬрд╡рд╛рдм
    рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ:

     UInt(bitPattern: Int) 


    рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

     let myNegative = UInt(bitPattern: -1) 



    рдкреНрд░рд╢реНрди 3
    рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ? рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

    рдЬрд╡рд╛рдм
    рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЙрджрд╛рд╣рд░рдг рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрд╕рд░реЗ рдХреЛ рд░рдЦрддрд╛ рд╣реИред

    рдХреАрд╡рд░реНрдб рдХреЛ рдХрдордЬреЛрд░ рдпрд╛ рдЕрдЬреНрдЮрд╛рдд рдмрддрд╛рдХрд░ рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рддрд░рдл рд╕реЗ рдмрджрд▓рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


    рдкреНрд░рд╢реНрди 4
    рд╕реНрд╡рд┐рдлреНрдЯ рдЖрдкрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд╕реНрдорд░рдг рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрд▓рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╕рд╣рдпреЛрдЧреА рдкреНрд░рдХрд╛рд░, рдЯреА рдФрд░ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

     enum List<T> { case node(T, List<T>) } 

    рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рд╣рдореЗрдВ рдХреНрдпрд╛ рдпрд╛рдж рдЖрдпрд╛?

    рдЬрд╡рд╛рдм
    рд╣рдо рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреАрд╡рд░реНрдб рдХреЛ рднреВрд▓ рдЧрдП, рдЬреЛ рд╕рдорд╛рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд┐рдХрд▓реНрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

     enum List<T> { indirect case node(T, List<T>) } 




Source: https://habr.com/ru/post/hi449410/


All Articles