Урок 20. Классы
Главная / Уроки / Страница блока Основы / Урок 20. Классы / Задача 20. Классы
23 Марта 2023
Задача 20.1 
Что бы отобразить результат работы метода getDescription, необходимо вызвать метод у экземпляра класса. Можете так же освежить память о возврате данных функцией.
Создайте класс Person
, который содержит свойства name, age, gender
. Определите значения по умолчанию для каждого из свойств. Класс так же должен содержать метод getDescription
, который возвращает предложение со всей информацией о персоне.
Создайте экземпляр класса, и задайте конкретные значения для свойств. Отобразите результат работы метода getDescription
на консоли.
Не используйте в решении инициализатор. Операйтесь только на пройденные концепции.
class Person {
var name = ""
var age = 0
var gender = ""
func getDescription() -> String {
"Name: \(name), age: \(age), gender: \(gender)"
}
}
let person = Person()
person.name = "Tim"
person.age = 35
person.gender = "Male"
print(person.getDescription())

В классе, все свойства являются переменными, так как мы их планируем изменять, и в качестве значений по умолчанию имеют пустые строки и 0, лучше не задавать что то конкретное.
Метод возвращает строку. Свойства класса мы передаем на прямую, они нам доступны в этой области видимости, если вы решили следующим образом, то это будет считаться ошибкой:
class Person {
var name = ""
var age = 0
var gender = ""
func getDescription(name: String, age: Int, gender: String) -> String {
"Name: \(name), age: \(age), gender: \(gender)"
}
}

Параметры нужны только если вы хотите что то передать из экземпляра класса, во всех остальных случаев это не имеет смысла.
Если вы создали отдельное свойство для возврата значения метода, это будет считаться тоже хорошим решением:
let info = person.getDescription()
print(info)

Есть еще одно хорошее решение, которое будет предпочтительней, но на данном этапе оно вам может показаться сложным:
enum Gender {
case male
case fimale
case none
}
class Person {
var name = ""
var age = 0
var gender: Gender = .none
func getDescription() -> String {
"Name: \(name), age: \(age), gender: \(gender)"
}
}
let person = Person()
person.name = "Tim"
person.age = 35
person.gender = .male
let info = person.getDescription()
print(info)

Свойство gender имеет тип перечисления, а это значит, что мы не можем задать ошибочное значение. Старайтесь всегда строковое значение заменять на перечисление, если такое возможно.
Вы так же могли решить задачу так:
class Person {
var name = "Tim"
var age = 35
var gender = "male"
func getDescription() {
print("Name: \(name), age: \(age), gender: \(gender)")
}
}
let person = Person()
person.getDescription()

Здесь происходит нарушение условий задачи, конкретные значения для свойств должны быть заданы из экземпляра класса. Метод должен именно возвращать значение, а не выводить его на консоль.
Начинающие разработчики могут долго думать над следующей ошибкой:
func getDescription() -> String {
print("Name: \(name), age: \(age), gender: \(gender)")
}
getDescription
должен вернуть строковое значение, а в данном случае внутри происходит вызов метода print, который ничего не возвращает (), поэтому в ошибке будет сказано, что () не является типом String, которой компилятор ожидает увидеть. Задача 20.2 
Каждый из методов должен принимать один параметр, который необходимо либо прибавить, либо вычесть из баланса, за который отвечает свойство balance.
BankAccount
, который будет содержать свойства balance
и accountNumber
. Создайте методы increaseDeposit
и withdrawMoney
, первый будет добавлять к балансу какую-то сумму, а второй уменьшать ее.
class BankAccount {
var balance = 0.0
var accountNumber = ""
func increaseDeposit(amount: Double) {
balance += amount
}
func withdrawMoney(amount: Double) {
balance -= amount
}
}
// Пример использования
let userAccount = BankAccount()
userAccount.accountNumber = "1234567890"
print(userAccount.balance) // 0.0
userAccount.increaseDeposit(amount: 1000.0)
print(userAccount.balance) // 1000.0
userAccount.withdrawMoney(amount: 500.0)
print(userAccount.balance) // 500.0

В этом примере класс BankAccount
содержит два свойства – balance
(баланс счета) и accountNumber
(номер счета), а также два метода – increaseDeposit
(для пополнения счета) и withdrawMoney
(для снятия денег со счета). При создании экземпляра класса необходимо указать номер счета, а баланс по умолчанию равен 0.
Затем мы создаем экземпляр класса userAccount
, пополняем его на 1000 долларов с помощью метода increaseDeposit
, затем снимаем с него 500 долларов с помощью метода withdrawMoney
и выводим баланс на каждом шаге.
Если вы задали свойству balance тип Int, то это не будет считаться ошибкой, но когда речь идет о деньгах, здесь лучше использовать более точные типы данных.
Если вы определили в методе withdrawMoney проверку на отрицательное значение, это тоже отлично.
Поддержите наш проект, и помогите изменить подход к обучению!


Развивайся вместе с нами
Поддержите наш проект, и помогите изменить подход к обучению!

Address List
Social Networks
Поддержите наш проект, и помогите изменить подход к обучению!

Social Networks