clmct / weather Goto Github PK
View Code? Open in Web Editor NEWSwift iOS application based on MVVM-C (non-reactive) pattern
Swift iOS application based on MVVM-C (non-reactive) pattern
Замечания по UI:
Замечания по коду (общие):
struct Main
MapViewModelDelegate
func showWeather(city: String)
неверное именование методов делегирования, советую почитать про общепринятые правила наименования методов (ссылка)MapViewModel
if let city = city {
если блок if закрывает всю функцию или блокирует дальнейшее выполнение (внутри имеется return
), вместо if
стоит использовать guard
cityName
. Вообще, чем больше конкретики в имени свойства, тем меньше потом будет проблем при выборе имени для похожего свойства.MapViewController
if let coordinate = self.viewModel?.coordinate {
логически этот блок можно вынести в отдельную функцию и заменить if
на guard
self.locationCardView.snp.remakeConstraints
настройку констрейнтов стоит делать вне блока анимации, а вот self.view.layoutIfNeeded()
уже анимировать (это замечание касается всех блоков UIView.animate в этом проекте)if isShowKeyboard {
аналогично if
-> guard
. Плюс следующий блок можно вынести в отдельную функцию и закрыть guard
, что бы уменьшить вложенность.if let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
выглядит массивно и запутанно, лучше вынести парсинг данных отдельноCLLocationDegrees(50)
CLLocationDegrees(10)
latitudinalMeters: 2000000, longitudinalMeters: 2000000
какие-то magic numbers, такое лучше выносить в константы или хоть как-то обозначить эти переменныеLocationCardView
closeCardViewButton
избыточные названия тоже стоит избегать, тут и так понятно что это кнопка закрытия окна, можно просто closeButton
WeatherViewModelDelegate
func showNetworkError(networkError: NetworkError, completion: @escaping (() -> Void) )
лучше избегать использование замыканий в методах делегирования, т.к. это ломает однонаправленную связь и делает код сложным для понимания и дебага (особенно сложно такой код дебажить в рантайме, проверено).WeatherViewModel
Int(weather.main.temp - 273.15)
опять какое-то magic number, не понятно что за число и почему именно его вычитаем. Конечно можно догадаться что это перевод в цельсии, но лучше обозначить константой или вынести в отдельную структуру а-ля TemperatureFormatter или что-то похожееprivate func getCommonDegrees(deg: Int) -> String {
это тоже лучше вынести в отдельный форматтер или что-то подобное. Плюс наименование не совсем корректное (common, на мой взгляд не подходит сюда)var updateView: (() -> Void)? { get set }
при наименовании замыканий стоит использовать одинаковый шаблон -> didRequestUpdateView
WeatherViewController
viewModel?.updateView = { [weak self] in
лучше тело замыкания вынести в функцию update()
или несколько функций.WeatherComponent
WeatherComponentView
WeatherIconComponent
CLLocation+dmsString
latitudeDescription
и longitudeDescription
Замечания по коду (общие):
MapViewModelDelegate
func requiredShowWeather(cityName: String)
с наименованием замечание актуально. Должно быть что-то вроде func mapViewModel(_ viewModel: MapViewModel, didRequestShowCityWith name: String)
(ссылка)LocationCardView
closeCardViewButton
избыточные названия тоже стоит избегать, тут и так понятно что это кнопка закрытия окна, можно просто closeButton
WeatherViewModelDelegate
func weatherViewModelDidRequestClose(_ viewModel: WeatherViewModel)
WeatherViewController
setDefaultImageView
и setImageView
не совсем корректные названия, т.к. ты задаешь не ImageView, а просто Image. То есть надо setImage(_ image: UIImage)
и `setDefaultImageView()A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.