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

рд╕реНрд╡рд┐рдлреНрдЯ 5.2 рдХрд╛ рдкрд╣рд▓рд╛ рдмреАрдЯрд╛ рдЕрднреА Xcode 11.4 рдмреАрдЯрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдХрдореА рдФрд░ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рднрд╛рд╖рд╛ рдореЗрдВ рднреА рдмрджрд▓рд╛рд╡ рд╣реБрдП рд╣реИрдВ, рд╕рд╛рде рд╣реА рдПрдХ рдирдпрд╛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЬрд▓реНрджреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

KeyPath рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

struct User {
    let name: String
    let age: Int
    let bestFriend: String?

    var canVote: Bool {
        age >= 18
    }
}

рдЖрдЗрдП рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦреЗрдВ:

let eric = User(name: "Eric Effiong", age: 18, bestFriend: "Otis Milburn")
let maeve = User(name: "Maeve Wiley", age: 19, bestFriend: nil)
let otis = User(name: "Otis Milburn", age: 17, bestFriend: "Eric Effiong")
let users = [eric, maeve, otis]

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

let userNames = users.map(\.name)
print(userNames)

рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдмрдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА:

let oldUserNames = users.map { $0.name }

рдЙрд╕реА рддрд░рд╣ рд╕реЗ, рдЖрдк рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдорддрджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

let voters = users.filter(\.canVote)

рдФрд░ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╣рд░ рдХреЛрдИ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдХ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЛрд╕реНрдд рд╣реИ:

let bestFriends = users.compactMap(\.bestFriend)

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди


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

struct Dice {
    var lowerBound: Int
    var upperBound: Int

    func callAsFunction() -> Int {
        (lowerBound...upperBound).randomElement()!
    }
}

let d6 = Dice(lowerBound: 1, upperBound: 6)
let roll1 = d6()
print(roll1)

рдпрд╣рд╛рдВ рд╣рдореЗрдВ 1 рд╕реЗ 6 рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ callAsFunction () рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзреА рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

let d12 = Dice(lowerBound: 1, upperBound: 12)
let roll2 = d12.callAsFunction()
print(roll2)

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

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ StepCounter рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдЙрдард╛рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 10,000 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

struct StepCounter {
    var steps = 0

    mutating func callAsFunction(count: Int) -> Bool {
        steps += count
        print(steps)
        return steps > 10_000
    }
}

var steps = StepCounter()
let targetReached = steps(count: 10)

callAsFunction () рднреА рдереНрд░реЛ рдФрд░ рд░реАрдереНрд░реЛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрдИ callAsFunction () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рджрд╕реНрдпрддрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ


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

struct PoliceForce {
    var officers: [String]

    subscript(index: Int, default default: String = "Unknown") -> String {
        if index >= 0 && index < officers.count {
            return officers[index]
        } else {
            return `default`
        }
    }
}

let force = PoliceForce(officers: ["Amy", "Jake", "Rosa", "Terry"])
print(force[0])
print(force[5])

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ "рдПрдореА" рдФрд░ рдлрд┐рд░ "рдЕрдЬреНрдЮрд╛рдд" рдорд┐рд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реВрдЪрдХрд╛рдВрдХ 5 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рддрддреНрд╡ рдирд╣реАрдВ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

print(force[-1, default: "The Vulture"])

рдирдП рдФрд░ рдмреЗрд╣рддрд░ рдирд┐рджрд╛рди


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

struct ContentView: View {
    @State private var name = 0

    var body: some View {
        VStack {
            Text("What is your name?")
            TextField("Name", text: $name)
                .frame(maxWidth: 300)
        }
    }
}

рдпрд╣рд╛рдВ рд╣рдо TextField рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд░рд╛рдЬреНрдпрд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдЧрд▓рдд рд╣реИред рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рддрдм рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ () рд╕рдВрд╢реЛрдзрдХ 'Int' 'CGFloat?' рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рд╕реНрд╡рд┐рдлреНрдЯ 5.2 рдФрд░ рдмрд╛рдж рдореЗрдВ $ рдирд╛рдо рдХреЗ рдмрдВрдзрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ: рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ 'рдмрд╛рдЗрдВрдбрд┐рдВрдЧ' рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ 'рдмрд╛рдЗрдВрдбрд┐рдВрдЧ' рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

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


All Articles