apple/SwiftUI, Combine 29

[SwiftUI 3.0] State/ Binding / EnvironmentObject

State/ Binding / EnvironmentObject ✅ 오늘은 이 세가지에 대해서 알아보자. @State: 값이 변경되었을 때, 화면을 다시 보여주어야 할 때. @Binding: state같은 친구들을 view - view 간에 공유해야 하는 경우. @EnvironmentObject: parent로 child(하위) view에 공유해야 하는 경우. 우선 State와 Binding에 대해서 이해해보자. ✅ 예시 코드 struct FirstView: View { @State var appTitle = tabIndex.first.rawValue @State var count = 0 enum tabIndex: String { case first = "1번뷰 입니다." case second = "2번뷰..

[SwiftUI] TabView + CustomTabView

TabView + CustomTabView 탭뷰는 그렇게 어렵지 않다. 하지만 커스텀 탭뷰는 탭뷰를 사용하는게 아니므로 각별히 주의하자! ✅ TabView import SwiftUI struct MyTabView : View { var body: some View{ TabView { // 탭뷰를 걸어준다. // 보여질 화면 // Text("1번") // .fontWeight(.black) // .font(.largeTitle) MyView(title: "1번", bgColor: Color.red) // 뷰 .tabItem { // 뷰에 탭 아이템을 건다! Image(systemName: "airplane") Text("1번") } .tag(0) // tag설정 // Text("2번") // .fontWe..

[SwiftUI] GeometryReader

GeometryReader ✅ GeometryReader에 대해서 알아보자. GeometryReader는 쉽게 말해서 디바이스 기기마다 대응하기 위함이다. 음,, 대충 오토 레이아웃이라고 생각하면 좋아! ✅ 코드 import SwiftUI enum Index { // enum으로 처리한다. case one, two, three } struct MyGeometryReaderVStack : View { @State var index: Index = .one // 초기 상태는 one으로 var body: some View{ // 부모뷰의 비율을 사용 가능하다. GeometryReader{ geometry in VStack{ Button(action:{ // 버튼이 클릭되었을때 로직 print("1번이 클릭되었..

[SwiftUI] NavigationView

NavigationView ✅ NavigationView 다른건 없고, navigationView가 중첩되는 문제만 주의하면 된다. 쉽게 말해서 최상단에서 NavigationView를 걸고 다른 childView에는 걸지 않아야 한다. ✅ 코드 import SwiftUI struct MyNavigationView : View { var body: some View{ // NavigationView란 쉽게 말해서 Embed in으로 네비게이션 하는거라고 생각 NavigationView { // ❗️ 최상단에만 이걸 걸어야 함! // Text("MyNavigationView") MyList() .navigationBarTitle("안녕하세요!") // 가운데 타이틀 // .navigationBarTitle(..

[SwiftUI] List (tableView in UIKit)

List (tableView in UIKit) ✅ SwiftUI의 List에 대해서 알아보자. List를 구성하는건 크게 어렵지 않다. ✅ MyList import SwiftUI struct MyList: View { // 다른쪽에서 데이터를 받아올 것이기 때문에 @Binding var isNavigationBarHidden: Bool // 바인딩의 경우에는 생성자 필수! init(isNavigationBarHidden: Binding = .constant(false)) { if #available(iOS 14.0, *){ } else { // 아래 버전에서는 푸터가 있어서 이 코드를 통해서 없애야 한다. UITableView.appearance().tableFooterView = UIView() } U..

[SwiftUI] Alert

Alert ✅ SwiftUI에서 Alert를 사용하는 것을 알아보자. 아주 간단한 내용을 기반으로 커스텀 하는 것은 알아서 해보기! import SwiftUI struct contentView: View { // struct는 class와 다르게 데이터가 고정이라서 변경을 하려면 @state키워드 사용 // mutating과 닮아있다. @State var shouldShowAlert: Bool = false var body: some View { Button( action: { print("확인 버튼이 클릭되었다.") self.shouldShowAlert = true }) { Text("확인") .fontWeight(.bold) .foregroundColor(.white) .padding() .frame..

[SwiftUI] VStack, HStack, ZStack

VStack, HStack, ZStack ✅ 스택뷰에 대해서 알아보자. ✅ VStack import SwiftUI struct MyVstack : View { var body: some View { // VStack에는 기본적인 spacing이 있어서 0으로 해주기 // alignment는 정렬 옵션 VStack(alignment: .trailing, spacing: 0) { // 우측으로 붙이기 위한 3가지 방법! // 공간을 아예 주어서 정렬하기 // Spacer() // opacity(0) 통해서 선을 안보이게 한다. Divider().opacity(0) // 아예 Rectangle 하나 더 만들기 // Rectangle() // .frame(height: 1) // Text("글자") .font(..

[SwiftUI] How to set Image in SwiftUI

How to set Image in SwiftUI ✅ SwiftUI에서 Image를 세팅하는 방법에 대해 알아봅니다. ✅ CircleImageView.swift import SwiftUI struct CircleImageView : View { var body: some View { //Image(systemName: "bolt.circle") // .font(.system(size: 200)) // 시스템 이미지는 font로 크기를 조절함. // .foregroundColor(.yellow) // .shadow(color: .gray, radius: 2, x: 2, y: 10) Image("myImage") .resizable() // 이미지의 크기를 조정해주기 위해서 .scaledToFill() /..

SwiftUI Info.plist가 없을 때

Info.plist가 없을 때 점점 SwiftUI가 OS별 이슈도 줄어들고 쓸만한 것 같음. 기존에는 UIKit으로 프로젝트를 생성해서 필요한 일정 부분에 SwiftUI를 도입하는 형태였는데, SwiftUI로 아예 프로젝트를 생성하니까 Info.plist가 안보임. 같은 Xcode 버전인데 UIKit으로 생성할 때랑 SwiftUI로 생성할 때랑 달라서 조금 당황ㅎ .. 이 설정이 config? 같은걸로 빠져서 대격변이 일어난건가 싶었는데 그건 아니였음. 완전히 새로운 파일을 교체하는 방법과 기존 파일에서 추가하는 방법 두가지를 알아보고자 함. 기존 파일을 활용하는 방법 타겟에서 저기에 위치함.  완전히 새로운 파일로 교체하는 방법파일 생성할 때처럼 Info.plist 파일을 생성해주기나는 Apperanc..