Code Monkey home page Code Monkey logo

neverbebored's Issues

Code Review: Landscape orientation

Boa tarde, @souzagabriela!

Tava dando uma olhada no seu código e percebi que seu app está funcionando no modo paisagem. Testei e acabei vendo que as constraints não estão se adequando tão bem nesse modo.

Acredito que existem duas abordagens para esse caso, bloquear o modo Landscape ou adaptar a view (como colocar uma Scroll View e etc) e as constraints dos componentes.

Ao analisar esse trecho de código, acredito que as constraints utilizadas não sejam tão apropriadas para esse caso.

func setupConstraints() {
NSLayoutConstraint.activate([
image.bottomAnchor.constraint(equalTo: cardView.topAnchor, constant: -120),
image.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20),
image.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 210),
catImage.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor),
catImage.bottomAnchor.constraint(equalTo: self.centerYAnchor, constant: -180),
catImage.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: -100),
catImage.trailingAnchor.constraint(equalTo: self.trailingAnchor),
cardView.topAnchor.constraint(equalTo: catImage.topAnchor, constant: 180),
cardView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.25),
cardView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.85),
cardView.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
label.topAnchor.constraint(equalTo: cardView.topAnchor),
label.bottomAnchor.constraint(equalTo: cardView.bottomAnchor),
label.leadingAnchor.constraint(equalTo: cardView.leadingAnchor, constant: 20),
label.trailingAnchor.constraint(equalTo: cardView.trailingAnchor, constant: -10),
buttonGetStarted.topAnchor.constraint(equalTo: self.centerYAnchor, constant: 100),
buttonGetStarted.centerXAnchor.constraint(equalTo: self.centerXAnchor),
buttonGetStarted.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.05),
buttonGetStarted.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.40)
])
}

Uma solução possível para o botão dessa view se adequar a ambos os modos seria:

buttonGetStarted.topAnchor.constraint(equalToSystemSpacingBelow: cardView.bottomAnchor, multiplier: 4),
buttonGetStarted.leadingAnchor.constraint(equalTo: cardView.leadingAnchor),
buttonGetStarted.trailingAnchor.constraint(equalTo: cardView.trailingAnchor),
buttonGetStarted.heightAnchor.constraint(equalToConstant: 36)

Make the button a view component

Tudo certo Gabriela? Continuando a revisão de seu projeto, percebi que você repetiu bastante um estilo de botão em duas telas diferentes, mas criando diversas instâncias que praticamente usam atributos e valores bem semelhantes.

lazy var buttonDoIt = make(UIButton()) {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.configuration = .bordered()
$0.layer.cornerRadius = 10
$0.setTitle(" Favorite", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.titleLabel?.textColor = .white
let largeFont = UIFont.systemFont(ofSize: 16)
let configuration = UIImage.SymbolConfiguration(font: largeFont)
var heartImage = UIImage(systemName: "heart.fill", withConfiguration: configuration)?.withTintColor(.white, renderingMode: .alwaysOriginal)
$0.setImage(heartImage, for: .normal)
$0.backgroundColor = UIColor(named: "cardOrange")
$0.addTarget(self, action: #selector(buttonClicked(_ :)),
for: .primaryActionTriggered)
}

Acredito que para diminuir essa quantidade e também aumentar a utilização do conceito de reuso da POO, você poderia utilizar a criação de uma classe customizada que assina UIButton e recebe esses valores semelhantes, alterando apenas o que você julgar necessário especificamente em cada um na chamada do botão na view.

O seguinte artigo explica e exemplifica melhor o que apresentei: Create a Custom UIButton in Swift

Faz sentido o que apresentei? Caso faça, fico bastante feliz em ajudar e estou disposto a conversamos caso não tenha sido uma ideia interessante.

Improve the fetch() call

E aí Gabriela, tudo certo? Seu projeto está incrível, parabéns por todo seu trabalho!
Existe alguns detalhes, que acredito poderem ser melhorados a fim de crescer sua aplicação, a partir do código abaixo:

func fetch() {
URLSession.shared.request(
url: Url.baseUrl,
expecting: BoredInfo.self
) { [weak self] result in
switch result {
case .success(let bored):
self?.mainScreenModel.activities = [bored]
case.failure(let error):
print(error)
}
}
}
}

Da forma como está sendo realizada, sua aplicação acaba perdendo a praticidade de criar um teste unitário da sua camada de network. Então uma forma de realizar isso é através da injeção da URLSession, através de parâmetro, na sua função de chamada para API, como no exemplo a seguir:

func fetch(session: URLSession = .shared) {
    // Code here
}

E onde você utilizava URLSession.shared passa a ser apenas o parâmetro session. A partir disso, seu código passa a ser testável com a utilização de mocks e assim evitando realizar sempre uma requisição durante o teste unitário.

Espero que a sugestão faça sentido para sua aplicação e realmente ajuda, e também deixo aqui um artigo sobre testes unitários com mocks, ele muda a abordagem para protocol, mas a base é bem semelhante ao que você está utilizando:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.