if(kakao)2020 세션을 보고 생각한 것들
SwiftUI로 프로젝트를 진행하고 있어서, SwiftUI랑 iOS 위주로 봤다.
SwiftUI를 망설이고 있다면? - 염승엽 Flip 님
제일 먼저 본 세션.
이번 프로젝트를 시작할 때 부터 SwiftUI 배워보고싶다! 써보자! 해서 쓰게 된거라
난 전혀 망설이진 않았지만,… 오히려 그 반대지만…
다른 사람이 생각하는 SwiftUI를 써야하는 이유와
카카오에서는 어떤 식으로 SwiftUI를 쓰기 시작했는지가 궁금해서 홀린듯이 클릭했던 것 같다.
LOC(Line Of Codes)의 관점에서 볼 때 차이가 진짜 디박,,
내가 SwiftUI를 써보면서 (아직 얼마 쓰지도 않았지만) 진짜 좋다고 느낀 게
기본값이 중앙인 것 !! 스토리보드로 뷰를 짜다 보면 Horizontal이든 Vertical이든 Center 정렬을
진짜 많이 쓰는데…. 왼쪽 맨 위가 기본값인게 정말 맘에 안들었었다.
중앙 정렬하고 간격 조정하고 하는 데 시간 진짜진짜 많이 잡아먹는데 SwiftUI를 쓰면
기본값이 중앙인 건 물론이고.. Spacer() 요놈도 진짜 넘 편하다 ㅠ 오브젝트가 여러개면 자동 n등분 해주는것도 쵝오..
Canvas로 실시간 프리뷰를 볼 수 있는 건 말할 것도 없고 ~!!
padding
.padding([.leading, .trailing], 16)
이런식으로 padding값을 여러 개 한번에 줄 수도 있군 !
❗️추가 : 이렇게 줄 수 도 있다.
.padding(.horizontal, 16)
각 요소 computed property로 분리하기
//loginView: some View
VStack(spacing: 10){
titleText
descriptionText
}
kakaoLoginButton
private var titleText: Text{
Text(viewModel.title)
.font(.system(size: 18))
.foregroundColor(.black25)
}
private var kakaoLoginButton: some View{
Button(action: viewModel.kakaoLogin){
Hstack(alignment: .center, spacing: 6.0){
Image(viewModel.kakaoButtonIcon)
Text(viewModel.kakaoButtonTitle)
}
}
.buttonStyle(KakaoButtonStyle())
}
이런 식으로 각 요소들을 computed property로 분리해서 사용이 가능하다고 한다 !
방금까지 그냥 한곳에 우르르 때려넣는 식으로 뷰 짜다가 세션 본건데
이걸 지금 봐서 넘 다행이다 ( ◠‿◠ ) ㅋㅋㅋㅋ
그리고 아직 MVVM에 대한 이해가 부족함..
그래서 viewModel은 어떻게 쓰는건지에 대해 좀 더 공부가 필요하다!
구조체 새로 정의해서 사용하기
fileprivate struct KakaoLoginButton: View{
@Binding var viewModel: LoginViewModel
var body: some View{
Button(action: viewModel.kakaoLogin){
Hstack(alignment: .center, spacing: 6.0){
Image(viewModel.kakaoButtonIcon)
Text(viewModel.kakaoButtonTitle)
}
}
.buttonStyle(KakaoButtonStyle())
}
}
이런 식으로 구조체를 새로 정의해서 사용하는것도 가능하다.
이게 apple이 권장하는 방식이라고 한다 !
(이런식으로 파일을 새로 만들어 뷰를 분리하는 것)
이런 식으로 짜봐야지!
buttonStyle 프로토콜을 따르는 버튼 스타일 정의해서 사용하기
위 코드에서 .buttonStyle(KakaoButtonStyle())
요 부분!
자주 사용하는 버튼 스타일들을 정의하고 간편하게 사용할 수 있다.
제플린 보고 나도 여러 개 만들어봐야지 ~!
struct KakaoButtonStyle: ButtonStyle{
func makeBody(configuration: Self.Configuration) -> some View{
configuration.label
// 설정들 주루루룩
}
}
버튼 외에도 Toggle, Picker, TextField 등에도
이렇게 스타일들을 따로 정의할 수 있는 프로토콜이 존재한다고 한다!
순수 SwiftUI앱? UIKit을 떼어놓을 수는 없다
SwiftUI에서 제공하지 않는 것들은 UIViewRepresentable
프로토콜을 채택한 View를 새로 정의해서
UIKit 기반으로 구현해야 한다고 한다… 라는 말을 듣자마자
안그래도 방금 검색하고 온 progress bar가 생각났다,,^__^
원래는 ProgressView랑 ZStack 써서 구현해야겠네 하고 있었는데 세션에서 마침ㅋㅋㅋ 와아
iOS13, iOS14
iOS14에서 굉장히 많은게 추가되었던거군…
전에는 CollectionView 짜기 진짜 힘들었을 것 같다. 어떤 식으로 짰으려나,,,
롸?
지금 SwiftUI로 개발하다가 왔는…데..
놀랐지만 ㅋㅋㅋㅋㅋㅋㅋㅋ 버전 관련 문제 때문이었다.
지금 진행하는 프로젝트는 iOS14부터 지원하도록 할거니까….다행 ( ◠‿◠ ) 어우 놀랬네
하나하나 볼 때마다 추가할 예정,,,