Не могу понять как используя Dictionary написать функцию внутри класса. Спасибо
class Car {
let color: String
let model: String
var doors: [Int:String] = [:]
let brand: String
let state: String
init (color: String, model: String, doors: [Int:String], brand: String, state: String) {
self.color = color
self.model = model
self.doors = doors
self.brand = brand
self.state = state
}
func openDoor (numberDoor: Int) {
}
func closeDoor (numberDoor: Int) {
}
}
let car = Car(color: "Black", model: "A8", doors: [1:"Door #1", 2: "Door #2"], brand: "Audi", state: "Stop")
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Если использовать словарь, то можно сделать так - завести еще один словарь, где сохранять состояние дверей
Вариант 1
class Car {
let color: String
let model: String
var doors: [Int:String] = [:]
let brand: String
let state: String
var doorsOpenState: [Int: Bool] = [:]
init (color: String, model: String, doors: [Int:String], brand: String, state: String) {
self.color = color
self.model = model
self.doors = doors
self.brand = brand
self.state = state
}
func openDoor (numberDoor: Int) {
guard let doorName = doors[numberDoor] else {
print("Invalid door number", numberDoor)
return
}
let isDoorOpen = doorsOpenState[numberDoor] ?? false
let doorStateMessage = isDoorOpen ? "is already opened" : "is opened"
print(doorName, doorStateMessage)
doorsOpenState[numberDoor] = true
}
func closeDoor (numberDoor: Int) {
guard let doorName = doors[numberDoor] else {
print("Invalid door number", numberDoor)
return
}
let isDoorClosed = !(doorsOpenState[numberDoor] ?? false)
let doorStateMessage = isDoorClosed ? "is already closed" : "is closed"
print(doorName, doorStateMessage)
doorsOpenState[numberDoor] = false
}
}
let car = Car(color: "Black", model: "A8", doors: [1:"Door #1", 2: "Door #2"], brand: "Audi", state: "Stop")
car.openDoor(numberDoor: 1)
car.openDoor(numberDoor: 1)
car.openDoor(numberDoor: 1)
car.closeDoor(numberDoor: 1)
car.closeDoor(numberDoor: 1)
Но я бы сделал иначе - для большей связности я бы создал объект Door, чтобы хранить состояние сразу в нем
Вариант 2
class Car {
class Door {
var number: Int
var name: String
var isOpen: Bool
init(number: Int, name: String, isOpen: Bool = false) {
self.number = number
self.name = name
self.isOpen = isOpen
}
}
let color: String
let model: String
var doors: [Door]
let brand: String
let state: String
init (color: String, model: String, doors: [Door], brand: String, state: String) {
self.color = color
self.model = model
self.doors = doors
self.brand = brand
self.state = state
}
func openDoor (numberDoor: Int) {
guard numberDoor > 0 && numberDoor <= doors.count else {
print("Invalid door number", numberDoor)
return
}
let door = doors[numberDoor - 1]
let doorStateMessage = door.isOpen ? "is already opened" : "is opened"
print(door.name, doorStateMessage)
door.isOpen = true
}
func closeDoor (numberDoor: Int) {
guard numberDoor > 0 && numberDoor <= doors.count else {
print("Invalid door number", numberDoor)
return
}
let door = doors[numberDoor - 1]
let doorStateMessage = !door.isOpen ? "is already closed" : "is closed"
print(door.name, doorStateMessage)
door.isOpen = false
}
}
let car = Car(
color: "Black",
model: "A8",
doors: [Car.Door(number: 1, name: "Door #1"), Car.Door(number: 2, name: "Door #2")],
brand: "Audi",
state: "Stop")