13 Урок посвящен описанию понятия класс и структура в Swift.
Домашнее задание:
Домашнее задание:
/*
1. Создайте структуру студент. Добавьте свойства: имя, фамилия, год рождения, средний бал. Создайте несколько экземпляров этой структуры и заполните их данными. Положите их всех в массив (журнал).
2. Напишите функцию, которая принимает массив студентов и выводит в консоль данные каждого. Перед выводом каждого студента добавляйте порядковый номер в “журнале”, начиная с 1.
3. С помощью функции sorted отсортируйте массив по среднему баллу, по убыванию и распечатайте “журнал”.
4. Отсортируйте теперь массив по фамилии (по возрастанию), причем если фамилии одинаковые, а вы сделайте так чтобы такое произошло, то сравниваются по имени. Распечатайте “журнал”.
5. Создайте переменную и присвойте ей ваш существующий массив. Измените в нем данные всех студентов. Изменится ли первый массив? Распечатайте оба массива.
6. Теперь проделайте все тоже самое, но не для структуры Студент, а для класса. Какой результат в 5м задании? Что изменилось и почему?
007. Уровень супермен
Выполните задание шахмат из урока по энумам используя структуры либо классы
38:53
*/
struct Student {
var firstName: String
var lastName: String
var year: Int
var averageRate: Double
}
var student1 = Student(firstName: "Alex", lastName: "Tim", year: 1984, averageRate: 4.5)
var student2 = Student(firstName: "Vasya", lastName: "Ivanov", year: 1990, averageRate: 4.1)
var student3 = Student(firstName: "Petya", lastName: "Petrov", year: 1980, averageRate: 4.7)
var student4 = Student(firstName: "Vanya", lastName: "Petrov", year: 1982, averageRate: 3.9)
var listStudents = [student1, student2, student3, student4]
/*
2
*/
print("\nN 2\n")
func printList(listStudents: [Student]) {
for (index,student) in listStudents.enumerated() {
print("№ \(index + 1). \(student.lastName) \(student.firstName) was born \(student.year). AverageRate: \(student.averageRate)")
}
}
printList(listStudents: listStudents)
/*
3
*/
print("\nN 3\n")
let listRateSorted = listStudents.sorted { (st1, st2) -> Bool in
st1.averageRate > st2.averageRate
}
printList(listStudents: listRateSorted)
/*
4
*/
print("\nN 4\n")
let listNameSorted = listStudents.sorted { (st1, st2) -> Bool in
st1.lastName == st2.lastName ? st1.firstName < st2.firstName : st1.lastName < st2.lastName
}
printList(listStudents: listNameSorted)
/*
5
*/
print("\nN 5\n")
var modifyListStudents = listStudents
modifyListStudents[0].firstName = "Den"
modifyListStudents[0].lastName = "Zaytsev"
modifyListStudents[1].firstName = "Vasek"
modifyListStudents[1].lastName = "Trubachev"
print("Old List (Struct):")
printList(listStudents: listStudents)
print("\nModify List (Struct):")
printList(listStudents: modifyListStudents)
/*
6
*/
print("\nN 6\n")
class StudentClass {
var firstName: String
var lastName: String
var year: Int
var averageRate: Double
init(firstName: String, lastName: String, year: Int, averageRate: Double) {
self.firstName = firstName
self.lastName = lastName
self.year = year
self.averageRate = averageRate
}
}
var newStudentList = [
StudentClass(firstName: "Alex", lastName: "Tim", year: 1984, averageRate: 4.5),
StudentClass(firstName: "Vasya", lastName: "Ivanov", year: 1990, averageRate: 4.1),
StudentClass(firstName: "Petya", lastName: "Petrov", year: 1980, averageRate: 4.7),
StudentClass(firstName: "Vanya", lastName: "Petrov", year: 1982, averageRate: 3.9)
]
func printList(listStudents: [StudentClass]) {
for (index,student) in listStudents.enumerated() {
print("№ \(index + 1). \(student.lastName) \(student.firstName) was born \(student.year). AverageRate: \(student.averageRate)")
}
}
var newModifyListStudents = newStudentList
newModifyListStudents[0].firstName = "Den"
newModifyListStudents[0].lastName = "Zaytsev"
newModifyListStudents[1].firstName = "Vasek"
newModifyListStudents[1].lastName = "Trubachev"
print("Old List (Class):")
printList(listStudents: newStudentList)
print("\nModify List (Class):")
printList(listStudents: newModifyListStudents)
/*
7
*/
print("\nN 7\n")
enum ChessColor: String {
case white, black
}
enum ChessLetter: Int {
case a , b, c, d, e, f, g, h
}
enum ChessDigit: Int {
case one = 0 , two, three, four, five, six, seven, eight
}
enum ChessType: Int {
static let countOfType = 6
case king = 0x2654, queen, rook, knight, bishop, pawn
}
class ChessFigure {
let type: ChessType
let color: ChessColor
var letter: ChessLetter
var digit: ChessDigit
init(type: ChessType, color: ChessColor, letter: ChessLetter, digit: ChessDigit) {
self.type = type
self.color = color
self.letter = letter
self.digit = digit
}
func symbol() -> Character {
let delta = (self.color == .white) ? 0 : ChessType.countOfType
let unicode = self.type.rawValue + delta
let scalar = UnicodeScalar(unicode);
return Character(scalar!)
}
}
func createEmptyChessMate() -> [[Character]] {
var chessArray = [[Character]]()
for vertical in 0...7 {
var line = [Character]()
for horizontal in 0...7 {
line += (horizontal + vertical) % 2 == 0 ? "⬛" : "⬜"
}
chessArray.append(line)
}
return chessArray
}
func showChessMate(chessMate: [[Character]]) {
let letter = " a b c d e f g h"
print(letter)
for (index,lineArray) in chessMate.enumerated().reversed() {
var lineChar = String(index + 1) + " "
for char in lineArray {
lineChar += String(char)
}
print(lineChar)
}
print(letter)
}
func setFiguresInChess(chessMate: [[Character]], figureArray array: [ChessFigure]) -> [[Character]]{
var chessArray = chessMate
for figure in array {
chessArray[figure.digit.rawValue][figure.letter.rawValue] = figure.symbol()
}
return chessArray
}
var chessMate = createEmptyChessMate()
let figuresArray = [
ChessFigure(type: .king, color: .white, letter: .b, digit: .one),
ChessFigure(type: .rook, color: .white, letter: .d, digit: .seven),
ChessFigure(type: .rook, color: .white, letter: .e, digit: .eight),
ChessFigure(type: .king, color: .black, letter: .f, digit: .eight)
]
chessMate = setFiguresInChess(chessMate: chessMate, figureArray: figuresArray)
showChessMate(chessMate: chessMate)
Console:
N 2
№ 1. Tim Alex was born 1984. AverageRate: 4.5
№ 2. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
N 3
№ 1. Petrov Petya was born 1980. AverageRate: 4.7
№ 2. Tim Alex was born 1984. AverageRate: 4.5
№ 3. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
N 4
№ 1. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 2. Petrov Petya was born 1980. AverageRate: 4.7
№ 3. Petrov Vanya was born 1982. AverageRate: 3.9
№ 4. Tim Alex was born 1984. AverageRate: 4.5
N 5
Old List (Struct):
№ 1. Tim Alex was born 1984. AverageRate: 4.5
№ 2. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
Modify List (Struct):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
N 6
Old List (Class):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
Modify List (Class):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9
N 7
a b c d e f g h
8 ⬜⬛⬜⬛♖♚⬜⬛
7 ⬛⬜⬛♖⬛⬜⬛⬜
6 ⬜⬛⬜⬛⬜⬛⬜⬛
5 ⬛⬜⬛⬜⬛⬜⬛⬜
4 ⬜⬛⬜⬛⬜⬛⬜⬛
3 ⬛⬜⬛⬜⬛⬜⬛⬜
2 ⬜⬛⬜⬛⬜⬛⬜⬛
1 ⬛♔⬛⬜⬛⬜⬛⬜
a b c d e f g h