UIKit

Swift/etc

[UIKit] iOS의 UIKit을 이용한 Google Sign-In

문제상황 Firebase를 이용하여 Google 로그인 버튼을 문서를 보고 구현하고 미흡한 부분이 없는지 이전에 봐둔 예제를 보고 참고하려고 했다. 2022년 예제인데도 그새 방식이 바뀐 모양인지 Delegate를 이용하여 AppDelegate에서 이뤄지는 작업이 대폭 축소되고 로직을 구현하는 ViewController의 역할이 증가하였다. 지금은 아래의 코드가 AppDelegate에서 하는 역할의 전부다. func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() ..

Swift/Rick & Morty

[iOS] Rick&Morty - #20 Fetch Episodes

에피소드의 데이터를 받아와서 세 번째 섹션을 채우는 작업을 한다. 3번째 섹션 지난번 시간에 우리는 두번째 섹션인 Info 셀에 대한 내용을 채우는 작업을 했다. 세 번째 섹션에 대해 기억이 안 난다면 다음과 같이 파란색으로 칠해서 보자. 파란색 카드들이 줄지어 있을 것이다. 에피소드 카운트만큼 생성됐으므로 릭 산체스의 경우 51개가 존재한다. final class RMCharacterEpisodeCollectionViewCell: UICollectionViewCell { ... override init(frame: CGRect) { super.init(frame: frame) contentView.backgroundColor = .systemBlue contentView.layer.cornerRadiu..

Swift/UIKit

[UIKit] viewDidLayoutSubviews란?

뷰의 서브 뷰가 레이아웃 될때 호출하는 메서드. 주로 레이아웃과 관련된 코드를 여기서 작성하게 된다. 일반적인 생성주기 메서드 (viewDidLoad, viewwillDisppear 등등)와는 달리 뷰의 레이아웃이 변경 될때마다 호출된다. 이 특성 덕에 imageView 혹은 UIView의 cornerRadius를 frame에 맞게 수정하고자 하는 경우에 사용할 수 있다.

Swift/Rick & Morty

[iOS] Rick&Morty - #19 Character Info ViewModel

이번엔 Info셀에 실제 데이터를 가져와서 적용시킨다. 데이터 연결 먼저 설정해 놨던 더미 Text, image 들을 지우자. 그리고 viewModel의 데이터를 이용하여 초기화한다. final class RMCharacterInfoCollectionViewCell: UICollectionViewCell { ... public func configure(with viewModel: RMCharacterInfoCollectionViewCellViewModel) { valueLabel.text = viewModel.value titleLabel.text = viewModel.title } } 개선 개선할 점이 네 가지가 보인다. 이미지가 필요 문자열이 잘리고 날짜가 이상하게 보인다. 마지막으로 비어있는 Ty..

Swift/Rick & Morty

[iOS] Rick&Morty - #18 Character Info Cell

Info Cell을 만들어 본다. 간단하게 View를 정의할 것이다. VM을 조정하여 더욱 Type safe 하게 만들 것이다. UI 잡는건 너무 기본적인 거라서 이번에는 설명을 생략하겠다. system 색상만으로 코딩을 진행하는 게 인상 깊었는데 이렇게 두고 보니 꽤 깔끔한 화면이 나온다. contentView.layer.masksToBounds에 대해 잠깐 설명하면 뷰의 경계를 기준으로 서브 뷰와 레이어의 영역을 잘라내는지의 여부를 결정하게 된다. 우리는 이걸 true로 하는데 경계를 넘어가는 서브 뷰를 삭제해 버린다. 보통 circle Image View 같은 걸 만들 때 자주 사용할 것이다. final class RMCharacterInfoCollectionViewCell: UICollection..

Swift/etc

[UIKit] init(frame:)과 init(coder:)은 어떤 차이가 있는가?

두 메서드 모두 UIView를 초기화하다 보면 사용하는 녀석들이다. init(frame:) frame은 코드를 사용하여 뷰를 생성할 떄 호출하는 초기화 메서드다. (코드 베이스, programmatically 등) super.init(frame: ) 사용자 지정 뷰 클래스에서 UIVIew에 있는 init(frame: ) 메서드를 호출함으로써 초기화를 돕는다. 대표적으로 뷰의 프레임을 설정하거나 기본 속성을 설정한다. super.init(frame:. zero) frame 값을. zero로 주는 경우가 많은데 초기에 뷰가 화면에 나타나는 걸 방지하기 위해 한다. init(coder:) Storyboard, xib을 이용하여 화면을 구성할 때 필요한 녀석이다. NScoder를 이용하여 처리하게 되며, 컴파일..

Swift/etc

[Swift] Type of expression is ambiguous... 에러

Type of expression is ambiguous without more contextType of expression is ambiguous without more context 이 에러는 wrong argument 문제이다. 때문에 메서드를 이용하는 부분에서 문제가 생길 여지가 많다. 문제상황 내 경우에는 이 에러는 swicth에서 result를 이용해 success case, failure case를 두고 상황별로 동작을 정의하던 중에 발생했다. success에서는 let data를 생성하여 행동을 정의했고 failure에서는 let error를 만들고 그냥 break로 임시로 처리를 해놨다. public func configure(with viewModel: XYZViewModel) { v..

Swift/Rick & Morty

[iOS] Rick&Morty - #16 Character Detail ViewModels

이번엔 VM - View - VC를 연결하는 작업을 한다. Cell의 View와 VM 생성 먼저 Views 그룹에 또다시 CharacterDetails라는 그룹을 만들어 관리하자. 여기서 RMCharacterCollectionViewCell이라는 이름으로 세 가지 셀 파일을 만들어주고 각각 대응되는 VM도 만들어서 그룹으로 묶어준다. 이제 DetailVM에서 SectionType enum으로 가서 Associated value라는것을 추가할 것이다. enum SectionType { case photo(viewModel: RMCharacterPhotoCollectionViewCellViewModel) case information(viewModels: [RMCharacterInfoCollectionVie..

Swift/Rick & Morty

[iOS] Rick&Morty - #14 Compositional Layout

이번엔 Compositional Layout을 이용하여 dummy 화면을 구성할 것이다. 지난번에 Cannot find type 'NSCollecitonLayoutSection' in scope 에러가 있는 상태에서 끝났었다. Layout 일단 section을 선언해 주고 group을 받자. 다시 group을 위에서 선언한다. 일반적인 Group을 만들 때와는 달리 지금은 vertical을 만들 것이다. 서브아이템으로 [item]을 받게 하고 사이즈는 일단 비워두자 private func createSection(for sectionIndex: Int) -> NSCollecitonLayoutSection { let group = NSCollectionLayoutGroup.vertical( layoutSi..

Swift/UIKit

[UIKit] NavigationController에서 push 할때 버벅이는 문제

원인 새롭게 push 되는 ViewController의 배경색이 정해져 있지 않기 때문이다. 해결 ViewController에 배경색을 지정해 주면 된다. 예전에 몇번 겪었던 거 같은데 오랜만에 경험한다. 이전에는 View를 대충 그리고 데이터를 연동하는 방식으로 방식으로 했기 때문에 그랬던 거 같다.

devKen
'UIKit' 태그의 글 목록