рдЖрдИрдУрдПрд╕ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рдирд╛

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

рдкреНрд░рд╕реНрддреБрдд?

рдХреНрдпрд╛ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрд╛рдм рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ?

рдЖрдк рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдЙрд╕ рдорд╛рд░реНрдЧ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

рдЖрдкрдХреЗ рдХреЛрдб, рд╕рд╛рде рд╣реА рдкреБрд╕реНрддрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрд░реНрде рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреЛрдб рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдореБрдЦреНрдп рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдЯреВрдЯрдиреЗ рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛ред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╢рдмреНрдж рд╡рд░реНрдЧ (рдХреНрд▓рд╛рд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ (рдХреНрд▓рд╛рд╕, рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдПрдирдо) рдХрд╛ рдЕрд░реНрде рд╣реИред

рдЗрди рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХрд╛ рдХреЛрдб рдкрдардиреАрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдмреЗрд╢рдХ, рд╡рд░реНрдгрд┐рдд рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ, рдПрдХ рд╣реА рдХреЛрдб рдХреА рджреЛ рддрд░рд╣ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдЧрдиреНрджрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


final class MessyViewController: UIViewController {
private let userService = UserService()
var userID: String?
private var userList: [User]?
@IBOutlet private weak var searchBar: UISearchBar!
weak var delegate: SomeDelegate?
@IBAction private func cancelButtonPressed(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
navigationController?.navigationBar.backgroundColor = .red
navigationItem.title = "Some"
}
@IBOutlet private weak var tableView: UITableView!
}

рдпрд╣ рдХреЛрдб рд╡рд┐рдзрд┐рдпреЛрдВ, рдЪрд░ рдФрд░ рдЖрдЙрдЯрд▓реЗрдЯ рдХреЗ рдбрдВрдк рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рд╣реИред

рд╢реБрджреНрдз рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


final class CleanViewController: UIViewController {
// MARK: - IBOutlets
@IBOutlet private weak var searchBar: UISearchBar!
@IBOutlet private weak var tableView: UITableView!
// MARK: - Public Properties
var userID: String?
weak var delegate: SomeDelegate?
// MARK: - Private Properties
private let userService = UserService()
private var userList: [User]?
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationBar()
}
// MARK: - Private Methods
private func setupNavigationBar() {
navigationController?.navigationBar.backgroundColor = .red
navigationItem.title = "Some"
}
// MARK: - IBActions
@IBAction private func cancelButtonPressed(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
}
}

рдЦрд╛рд▓реА рд▓рд╛рдЗрди 38 - рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

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

рд╢реБрджреНрдз рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрдд:


  1. рд╣рдореЗрд╢рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ // MARK: -
  2. рд▓реЗрдмрд▓ рдХреЗ рдирд╛рдо рджреЗрдВ рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
  3. рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд░рдЦрдирд╛
  4. рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
  5. рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
  6. рд╣рдо рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  7. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджрд┐рдирдЪрд░реНрдпрд╛

1. рд╣рдореЗрд╢рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ // MARK: -


рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХ рдХреЛ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо // MARK: - рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рд╡рд░реНрдЧ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

рдпрд╣ рд▓реЗрдмрд▓ рди рдХреЗрд╡рд▓ рдкреВрд░реЗ рдХреЛрдб рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдЦрдбрд╝рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рднреА рдмрдирд╛рддрд╛ рд╣реИ - рдпрд╣ рдХреЛрдб рдореЗрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдмреЛрд▓реНрдб рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИред


рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдпрд╛ ctr + 6 (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдЗрдЯрдо рдореЗрдиреВ) рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╣реБрдд рдКрдкрд░ рджрд╛рд╣рд┐рдиреЗ рддреАрд░ (>) рдХреЗ рдмрд╛рдж рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

2. рд╣рдо рд▓реЗрдмрд▓ рдХреЗ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рдиреАрдЪреЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд▓реЗрдмрд▓ рд╣реИрдВ:

// MARK: - IBOutlets
// MARK: - Public Properties
// MARK: - Private Properties
// MARK: - Initializers
// MARK: - Lifecycle
// MARK: - Public Methods
// MARK: - Private Methods
// MARK: - IBActions
view raw MarkList.swift hosted with тЭд by GitHub

рдЗрд╕ рд╕рдореВрд╣реАрдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЛрдИ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

3. рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рддрд░реНрдХ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ


ViewController рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рдХреЛрдб рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдмрдирд╛рдиреА рдкрдбрд╝реЗред рдЖрдЬ рдПрдХ рд╣реИ, рдФрд░ рдХрд▓ рджрд╕ рд╣реИред

тЭМ NOT Preferred
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.backgroundColor = .red
someButton.layer.cornerRadius = 10
someButton.layer.masksToBounds = true
navigationItem.title = "Some"
print("Some")
}
тЬЕ Preferred
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationBar()
setupSomeButton()
printSome()
}
// MARK: - Private Methods
private func setupNavigationBar() {
navigationController?.navigationBar.backgroundColor = .red
navigationItem.title = "Some"
}
private func setupSomeButton() {
someButton.layer.cornerRadius = 10
someButton.layer.masksToBounds = true
}
private func printSome() {
print("Some")
}
view raw LifecycleMethods.swift hosted with тЭд by GitHub

рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдЙрдЯрд╕реЛрд░реНрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рддрд░реНрдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

4. рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдЪрд┐рд╣реНрдирд┐рдд / рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдВ : рдорд╛рд░реНрдХ: - SomeProtocol :

тЭМ NOT Preferred
final class CleanViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
// all methods
}
тЬЕ Preferred
final class CleanViewController: UIViewController {
// class stuff here
}
// MARK: - Table View Data Source
extension CleanViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return userList?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
return cell
}
}
view raw extension.swift hosted with тЭд by GitHub

рдЗрд╕ рд▓реЗрдмрд▓ рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ - рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рд╣реИ рдФрд░ рдХрд╣реАрдВ рдФрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рдЧреБрдг рдкреВрд░реЗ рд╡рд░реНрдЧ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд░рд╣реЗрдВрдЧреЗред

5. рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ


рджреГрд╢реНрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

тЭМ NOT Preferred
private func showActivityIndicator(on viewController: UIViewController) {
activityIndicator.center = viewController.view.center
loadingView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
loadingView.alpha = 0.5
activityIndicator.hidesWhenStopped = true
activityIndicator.style = .whiteLarge
loadingView.center = viewController.view.center
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 15
viewController.view.addSubview(loadingView)
viewController.view.addSubview(activityIndicator)
activityIndicator.startAnimating()
}
тЬЕ Preferred
private func showActivityIndicator(on viewController: UIViewController) {
activityIndicator.center = viewController.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.style = .whiteLarge
loadingView.center = viewController.view.center
loadingView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
loadingView.alpha = 0.5
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 15
viewController.view.addSubview(loadingView)
viewController.view.addSubview(activityIndicator)
activityIndicator.startAnimating()
}
view raw LogicalBlocks.swift hosted with тЭд by GitHub


6. рд╣рдо рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛ рд╣рдЯрд╛ рджреЗрдВ


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

тЭМ NOT Preferred
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
//
// func someFunc() {
// print("Some")
// }
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain
//types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits
//the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
тЬЕ Preferred
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
}
view raw AppDelegate.swift hosted with тЭд by GitHub


7. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджрд┐рдирдЪрд░реНрдпрд╛


рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП // MARK: - SomeMark , рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рд╣рдо рдПрдХ рд▓реЗрдмрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪреБрдиреЗрдВ, рдлрд┐рд░ рд╕рдВрдкрд╛рджрдХ -> рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВ рдФрд░ рдЗрд╕реЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╣реЗрдВред

// MARK: - рдмреЛрдирд╕


  1. рдЕрдВрддрд┐рдо рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреЗрдЬреА рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рддреА рд╣реИ рдФрд░ рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред
  2. рдирд┐рдЬреА рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЧреБрдг, рдЖрдЙрдЯрд▓реЗрдЯ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ - рд╡реЗ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡реЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред


рдореИрдВ рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣рд░ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдиреЗ рджреВрдВрдЧрд╛!

// MARK: - рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ
рд╕рд░реНрдЧреЗрдИ рдкреЗрдЪреЗрд▓рд╛рдХреЛрд╡
рдПрд▓реЗрдХреНрд╕реА рдкреНрд▓рд╛рд╢рдХреЛрд╡ рдПрд▓реЗрдХреНрд╕реЗрдкрд▓реЗрд╢рдХреЛрд╡

// рдорд╛рд░реНрдХ: - рд▓рд┐рдВрдХ
рд░реЗ рд╡реЗрдВрдбрд░рд▓рд┐рдЪ рдХреЛрдб рд╢реИрд▓реА

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


All Articles