[SwiftUI Bootcamp] beginner3

Woozoo·2023년 1월 15일
0

[SwiftUI]

목록 보기
3/26

[SwiftUI Bootcamp] beginner3


Stack안의 파라미터를 통해서 정렬, spacing 설정 가능


text의 frame을 직접 설정해서 공간을 줄 수도 있겠지만
.padding을 통해서 패딩을 주면 간결해짐 코드

프레임을주고 패딩을 주는 방법도 있음

패딩에 패딩을 줄 수도 있다!

Spacer

struct SpacerBootcamp: View {
    var body: some View {
        HStack {
            Rectangle()
                .frame(width: 100, height: 100)
            
            Spacer()
                .frame(height: 10)
                .background(.orange)
            
            Rectangle()
                .frame(width: 100, height: 100)
        }
        .background(.blue)
    }
}


주황색이 Spacer
object를 최대로 밀어내줌
만약에 Spacer가 없었으면 HStack(spacing: x) 요런식으로 하드코딩했어야 할텐데
Spacer쓰면 간단!

그리고 Spacer에는 mingLength 파라미터가 있는데 Stack의 Spacing과 비슷하다고 생각하면 됨 원하는 만큼 최소 간격을 설정해두는 거


int() & enums

struct InitializerBootcamp: View {
    
    let backgroundColor: Color = Color.green
    
    var body: some View {
        VStack(spacing: 12) {
            Text("5")
                .font(.largeTitle)
                .foregroundColor(.white)
                .underline()
            Text("Apples")
                .font(.headline)
                .foregroundColor(.white)
        }
        .frame(width: 150, height: 150)
        .background(backgroundColor)
        .cornerRadius(10)
    }
}

요런 뷰가 있다고 하자
만약에 이 뷰를 여러번 사용해야한다면 Color.green으로 설정한 부분을 지워서
init될 때 값을 넣어지게끔 만들면 되겠죠


init을 통해서 밖에서 받은 파라미터의 값들이
구조체 내부로 전달이 되는게 일반적임
그러니까 init을 작성하지 않더라도 저렇게 동작이 하고 있는 상태!

init에 요렇게 조건을 주는 것도 가능함!

여기에 enum을 사용한다면 원하는 케이스에 맞는 원하는 값들을 미리 지정할수도 있다!


ForEach

struct ForEachBootcamp: View {
    var body: some View {
        VStack {
            Text("One")
            Text("Two")
            Text("Three")
        }
    }
}

이런 코드가 있다고 했을 때 Text를 더 많이 늘리고 싶을 수 있잖음

ForEach를 넣어주는 거임

For 뒤에는 루프할 대상이 오고, 클로져 내에선 루프하는 대상 각각에 대한 처리를 해줄 수 있음

이렇게만 했을 땐 Non-constant range 경고가 나온다
지금 선언해줬던 Array가 identifiable하지 않아서 그럼!
현재의 상태에서 Array data의 element값이 같을 경우에는 에러가 발생할 수 있음
그래서 경고를 해주는거!

profile
우주형

0개의 댓글