рд╕реНрд╡рд┐рдлреНрдЯ 5.3: рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ?

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рд╕рдВрд╕реНрдХрд░рдг 5.3 рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдирдпрд╛ рд╣реИред

рдПрдХрд╛рдзрд┐рдХ рдЕрдиреБрдЧрд╛рдореА рдХреНрд▓реЛрдЬрд░


рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг ( SE-0279 ) рдкрд░рд┐рдорд┐рдд рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдХреНрд▓реЛрдЬрд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрд╖реНрдардХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

import Foundation

func load(url: String, success: (Data) -> Void, failure: (Error) -> Void) {
    
}

// old  version

load(url: "someURL", success: { data in }, failure: { error in })

// new multiple trailing closures

load(url: "someURL") { (data) in
    // do smth
} failure: { (error) in
    // do smth
}

2 рдХреЙрд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдиреЗрддреНрд░рд╣реАрди рджреВрд╕рд░реЗ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рдорд▓реНрдЯреА-рдкреИрдЯрд░реНрди рдХреИрдЪ рдХреНрд▓реЙрд╕


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдХ рдХреИрдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреИрдЪ рдХреНрд▓реЙрдЬ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреИрдЯрд░реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреИрдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб ( SE-0276 ) рдмрдврд╝реЗрдЧрд╛ ред

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

enum NetworkError: Error {
    case failure, timeout
}

// old  version
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.timeout{
    print("timeout")
  } catch NetworkError.failure{
    print("failure")
  }
}

// new multi-Pattern catch clauses
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.failure, NetworkError.timeout {
    print("handle for both")
  }
}

Enums рдХреЗ рд▓рд┐рдП Synthesized рддреБрд▓рдирд╛рддреНрдордХ рдЕрдиреБрд░реВрдкрддрд╛


рдЕрдм рддрдХ, рдПрдХ рдЧрдгрдирд╛ рдХреЗ 2 рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ рдЬреЛ "рд╕реБрдЦрдж" рдмрд╛рдд рд╣реЛрдЧреАред рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореВрд▓ рдорд╛рди рджреВрд╕рд░реЗ рд╕реЗ рдХрдо рд╣реИред

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

enum Brightness: Comparable {
    case low(Int)
    case medium
    case high
}

([.high, .low(1), .medium, .low(0)] as [Brightness]).sorted()
// [Brightness.low(0), Brightness.low(1), Brightness.medium, Brightness.high]

рд╕реЗрд▓реНрдлреА рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


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

struct OldView: View {

    var body: some View {
        Button(action: {
            self.sayHello()
        }) {
            Text("Press")
        }
    }
    
    func sayHello() {}
}

struct NewView: View {

    var body: some View {
        Button {
            sayHello()
        } label: {
            Text("Press")
        }
    }
    
    func sayHello(){}
}

рдЬреЗрдиреЗрд░рд┐рдХ рдореЗрдВ рдХрд╣рд╛рдВ


рднрд╛рд╖рд╛ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг ( SE-0267 ) рдиреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреЗрд╢ рдХреАред

struct Stack<Element> {
    private var array = [Element]()

    mutating func push(_ obj: Element) {
        array.append(obj)
    }

    mutating func pop(_ obj: Element) -> Element? {
        array.popLast()
    }
}

extension Stack {
    func sorted() -> [Element] where Element: Comparable {
        array.sorted()
    }
}

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

рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдлрд╝реНрд▓реЛрдЯ 16


рдкреНрд░рд╕реНрддреБрдд рдлреНрд▓реЛрдЯ 16 рдЕрд░реНрдз рд╕рдЯреАрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ ( рдПрд╕рдИ -0277 )ред рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдРрдкреНрдкрд▓ рдХреА рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлреНрд▓реЛрдЯ 16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ GPU рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ ML рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВред

let f16: Float16 = 7.29

рд╕реНрд╡рд┐рдлреНрдЯ 5.3 рдиреЗ рд╕реНрд╡рд┐рдлреНрдЯ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ (рдПрд╕рдкреАрдПрдо) рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдВрд╡рд░реНрджреНрдзрди рдкреЗрд╢ рдХрд┐рдП рд╣реИрдВред рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

  1. SE-0271 (рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд░рд┐рд╕реЛрд░реНрд╕реЗрдЬ) SPM рдХреЛ рдЗрдореЗрдЬ, рдСрдбрд┐рдпреЛ, JSON рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  2. SE-0272 (рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдмрд╛рдЗрдирд░реА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА) рдПрд╕рдкреАрдПрдо рдХреЛ рдореМрдЬреВрджрд╛ рд╕реНрд░реЛрдд рдкреИрдХреЗрдЬ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╛рдпрд░рдмрд╕ рдЬреИрд╕реЗ рд╕рд╛рдЭрд╛, рдмрдВрдж рд╕реНрд░реЛрдд рдПрд╕рдбреАрдХреЗ рдХреЛ рдЕрдм рдПрд╕рдкреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. SE-0273 (рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╕рд╢рд░реНрдд рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрднрд░рддрд╛) рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рдЕрддрд┐рд░рд┐рдХреНрдд рдврд╛рдВрдЪреЗ рдХреЛ рдирд╛рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  4. SE-0278 рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 5.3 рдиреЗ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдирд╡рд╛рдЪрд╛рд░ рдкреЗрд╢ рдХрд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

All Articles