Предисловие, месяц назад устроился на работу, передали проект, неделю я материл все, потом смерился. Перечислю малую часть того, что меня ввело в глубочайшую депрессию.
-
Всегда используйте в замыканиях слабую ссылочную связь https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html иначе будет ваше приложение жрать под гигабайт оперативы, а потом вылетать.
-
Дочерний элемент в view ничего не должен знать о родительском. Опять же будет жрать гиги оперативы. Что это значит, если у Вас есть VC, то вы не должны передавать указать на него в view который находится в нем, если вам нужно на что-то отреагировать используйте notification https://www.youtube.com/watch?v=Dvhdnt12rZA
-
Старайтесь избегать дублирование кода. пример из жизни: почти на каждом экране есть кастомная кнопка на вьюшке с тенью, все красиво, но код определяется на каждом контроллере, сделайте xib и весь дизайн определите там. Тоже самое касается cell
для меня лучшая практика
class PointInformationCell: UITableViewCell {
@IBOutlet weak var infImage: UIImageView!
@IBOutlet weak var infName: UILabel!
@IBOutlet weak var infDescription: UILabel!
@IBOutlet weak var infNameTopConstraint: NSLayoutConstraint!
static var reuseIdentifier: String {return String(describing: self)}
static var nib: UINib {return UINib(nibName: reuseIdentifier, bundle: nil)}
var model: PointInformationModel!
func configure(element: PointInformationModel) {
//инициализация ваших аутлетов
model = element
}
}
tableView.register(PointInformationCell.nib, forCellReuseIdentifier: PointInformationCell.reuseIdentifier)
-
Такие элементы как cell, view, не должны хранить в себе много логики, их задача только. отображать информацию
-
Старайтесь выносить логику, есть view, есть controller, это должны быть разные классы, один отвечает за отображение, второй, за то что отображать!
-
Проверяйте на утечки, Leaks, деинит, и будет вам счастье, swift умный относительно памяти, но в кривых руках…
-
Используете alamofire, вынести в отдельный слой тех же структур со статическими методами или посмотрите AlamofireRouter очень удобно.
-
Избегайте наименованных констант в тех же segue, используйте enum или структуры с статическими константами, я юзают приватную структуру с каждым идентификатором статическим
-
… и мне стало лень писать, может кто продолжет