рдПрдХ рдРрд╕реА рдкреБрд╕реНрддрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдХреЛрдИ рд╡рд┐рднрд╛рдЬрди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд┐рдирд╛ рдЯреВрдЯрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдРрд╕реА рдкреБрд╕реНрддрдХ рдЬрд╣рд╛рдВ рдХреЛрдИ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдирд╣реАрдВ рд╣реИрдВ, рдХреЛрдИ рдбреЙрдЯреНрд╕ рдФрд░ рдХреЙрдорд╛ рдирд╣реАрдВ рд╣реИрдВ, рдПрдХ рдкреБрд╕реНрддрдХ рдЬрд╣рд╛рдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдПрдХ рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреА рд╣реИ, рджреВрд╕рд░реА рджреВрд╕рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рддреАрд╕рд░реА рдлрд┐рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдкрд╣рд▓реА рдмрд╛рддред
рдкреНрд░рд╕реНрддреБрдд?
рдХреНрдпрд╛ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрд╛рдм рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ?
рдЖрдк рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдЙрд╕ рдорд╛рд░реНрдЧ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?
рдЖрдкрдХреЗ рдХреЛрдб, рд╕рд╛рде рд╣реА рдкреБрд╕реНрддрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрд░реНрде рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреЛрдб рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдореБрдЦреНрдп рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдЯреВрдЯрдиреЗ рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╢рдмреНрдж рд╡рд░реНрдЧ (рдХреНрд▓рд╛рд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ (рдХреНрд▓рд╛рд╕, рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдПрдирдо) рдХрд╛ рдЕрд░реНрде рд╣реИред
рдЗрди рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХрд╛ рдХреЛрдб рдкрдардиреАрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
рдмреЗрд╢рдХ, рд╡рд░реНрдгрд┐рдд рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ, рдПрдХ рд╣реА рдХреЛрдб рдХреА рджреЛ рддрд░рд╣ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдЧрдиреНрджрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
| 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 - рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред
рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рддрд░реНрдХ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ рджреЗрдЦрдирд╛ рд╕рд┐рд░реНрдл рдЕрдЪреНрдЫрд╛ рд╣реИред
рд╢реБрджреНрдз рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрдд:
- рд╣рдореЗрд╢рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ // MARK: -
- рд▓реЗрдмрд▓ рдХреЗ рдирд╛рдо рджреЗрдВ рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
- рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд░рдЦрдирд╛
- рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
- рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- рд╣рдо рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджрд┐рдирдЪрд░реНрдпрд╛
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 |
рдЗрд╕ рд╕рдореВрд╣реАрдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЛрдИ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
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") |
| } |
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдЙрдЯрд╕реЛрд░реНрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рддрд░реНрдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
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 |
| } |
| |
| } |
рдЗрд╕ рд▓реЗрдмрд▓ рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ - рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рд╣реИ рдФрд░ рдХрд╣реАрдВ рдФрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рдЧреБрдг рдкреВрд░реЗ рд╡рд░реНрдЧ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд░рд╣реЗрдВрдЧреЗред
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() |
| } |
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 |
| } |
| |
| } |
7. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджрд┐рдирдЪрд░реНрдпрд╛
рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
// MARK: - SomeMark ,
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╣рдо рдПрдХ рд▓реЗрдмрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪреБрдиреЗрдВ, рдлрд┐рд░ рд╕рдВрдкрд╛рджрдХ -> рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВ рдФрд░ рдЗрд╕реЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╣реЗрдВред// MARK: - рдмреЛрдирд╕
- рдЕрдВрддрд┐рдо рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреЗрдЬреА рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рддреА рд╣реИ рдФрд░ рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред
- рдирд┐рдЬреА рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЧреБрдг, рдЖрдЙрдЯрд▓реЗрдЯ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ - рд╡реЗ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡реЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдореИрдВ рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣рд░ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдиреЗ рджреВрдВрдЧрд╛!
// MARK: - рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрд╕рд░реНрдЧреЗрдИ рдкреЗрдЪреЗрд▓рд╛рдХреЛрд╡
рдПрд▓реЗрдХреНрд╕реА
рдкреНрд▓рд╛рд╢рдХреЛрд╡ рдПрд▓реЗрдХреНрд╕реЗрдкрд▓реЗрд╢рдХреЛрд╡// рдорд╛рд░реНрдХ: - рд▓рд┐рдВрдХрд░реЗ рд╡реЗрдВрдбрд░рд▓рд┐рдЪ рдХреЛрдб рд╢реИрд▓реА