рд╕реНрд╡рд┐рдлреНрдЯ 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 рдФрд░ рдмрд╛рдж рдореЗрдВ $ рдирд╛рдо рдХреЗ рдмрдВрдзрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ: рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ 'рдмрд╛рдЗрдВрдбрд┐рдВрдЧ' рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ 'рдмрд╛рдЗрдВрдбрд┐рдВрдЧ' рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред