Replies: 1 comment 1 reply
-
오타및 오루가 있으면 알려주세요 ㅎㅎㅎ |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
ForEach
SWIFT
일반적으로
ForEach
를 사용하여SwiftUI
에서 View를 반복할 수 있습니다.TIP
ForEach
를 보고 Swift시퀀스의forEach()
방식과 동일하다고 생각하기 쉽지만, 보시는 것처럼 그렇지 않습니다.SwiftUI
의ForEach
는Struct
구조 이므로 보기 본문에서 직접 반환할 수 있습니다. 항목 배열을 제공하고, 각 항목을 고유하게 식별하여 값이 변경될 때 업데이트하는 방법을 알 수 있습니다. 또한 루프의 각 항목에 대한 뷰를 생성하기 위해 실행할 클로저를 전달합니다.아래 코드는 1부터 10까지
row
값이 화면에 나타나도록 하는 코드입니다.SWIFT
이 코드보다 더 간단하게 사용하는 방법은
Text("Row \(number")
을 ($0
) 값을 사용 하면 됩니다.SWIFT
배열의 각 요소를 고유하게 식별
id: \.self
부분은SwiftUI
가 배열의 각 요소를 고유하게 식별할 수 있도록 하기 위해 필요합니다. 즉, 항목을 추가하거나 제거하면SwiftUI
가 정확히 어떤 요소를 알고 있는지 확인할 수 있습니다.이 접근 방식을 사용하여 모든 유형의 루프를 만들 수 있습니다. 예를 들어, 다음 코드는 세 가지 색상의 배열을 생성하고, 모든 색상을 반복하며, 각 색상 이름과 색상 값을 사용하여 텍스트 뷰를 생성합니다.
SWIFT
body 아래에 List 형식으로 Section을 사용하여 반복문을 만들어 보겠습니다.
SWIFT
위 결과 화면을 보면
Section
부분Header Text
에 소문자로 "first section"으로 지정해주었지만, 실제 결괏값은 대문자로 나와있는 것을 확인하실 수 있습니다. 이럴 때는.textCase(nil)
값을Section
밖에 추가하면 실제 사용자가 정해놓은 텍스트 값으로 보여주게 됩니다.SWIFT
전체 코드
SWIFT
변수값으로
ForEach
문을 사용할 수 있습니다.SWIFT
혹은 아래와 같이 만들수도 있죠.
세 가지 색상의 배열을 생성하고, 모든 색상을 반복하며, 각 색상 이름과 색상 값을 사용하여 텍스트 뷰를 생성합니다.
List
List
는 단일 열에 정렬 된 데이터 행을 표시하는 컨테이너입니다.SWIFT
정적 콘텐츠
List
의 생성자에 원하는 뷰를 전달하면 하나씩 각row
에 담아 표현합니다. 여기서 뷰 하나는row
하나에 해당합니다.TIP
UIKit에서는 UITableView에서 내용을 표시할 뷰를 셀이라고 불렀다면, SwiftUI에서는
row
라고 표현합니다.다음과 같이 텍스트가 아닌 다른 이미지 뷰를 넣어 봐도 동일하게
List
를 작성 할 수 있습니다.SWIFT
동적 콘텐츠
Range
동적 콘텐츠를 표현하는 첫번째 방법은
Range<Int
> 타입의 값을 넘겨주는 것입니다. 예를들어1
부터100
까지의 숫자를 출력하려면 다음과 같이 작성 하면 됩니다.SWIFT
RandomAccessCollection
두 번째 방법은
RandomAccessCollecion
프로토콜을 준수하는 데이터를 제공하는 것입니다. 이경우에는 데이터의 각 요소들을 구분하고 식별할 수 있도록 반드시 다음2
가지 방법 중 하나를 선택하여id
값을 제공해야만 합니다.첫 번째, id 식별자 지정
첫 번째는
id
로 사용할 값을 직접 인수로 제공하는 것입니다.SwifUI
에서는 이것을 간단히self
라고 입력할 수도 있습니다..List(["A", "B", "C", "D"], id: \.self) { ... }
두 번째, identifiable 프로토콜 채택
두 번째 방법은 매개 변수에
id
를 전달하는 대신 데이터 타입 자체에identifiable
프로토콜을 채택하는 것입니다. 타입 자체에id
프로퍼티를 만들고 이것을 식별자로 삼게 됩니다,우선
Ghibli
라는struct
를 만들고Identifiable
을 매개변수 타입으로 넣어준 후,원하는 상수와 식별가능한 코드
id = UUID()
를 작성합니다.TIP
UUID?? 유형, 인터페이스 및 기타 항목을 식별하는 데 사용할 수 있는 보편적으로 고유한 값입니다.
이제
ContentView
에List
와 위에 작성한 배열을 넣어줘야 합니다.이처럼
identifiale
프로토콜을 준수한다면, 이미 식별자가 있으므로 리스트에id
를 제공하지 않아도 무방합니다.정적 콘텐츠와 동적 콘텐츠 조합
ForEach
를 이용하면 이 두 가지를 조합하는 것도 가능합니다.ForEach
SwiftUI
에서ForEach
는List
처럼id
로 식별할 수 있는 데이터를 받아서 동적으로 뷰를 생성하는 역할을 합니다. 전달받은 매개변수도RandomAccessCollection
이나Range<Int
> 타입을 사용한다는 점도 같습니다. 그래서 아래 코드는 같은 결과를 보여주게 됩니다.SWIFT
SWIFT
하지만 리스트에서는 정적인 뷰도 포함할 수 있기 때문에,
ForEach
와 함께 사용하면 정적 + 동적 콘텐츠를 조합할 수 있는 것입니다.조합
이제 동적과 정적 콘텐츠를 조합한 예제를 살펴보도록 하겠습니다.
SWIFT
Section
섹션에는
header
와footer
를 생략하거나 추가할 수 있고, 둘 중 하나만 사용할 수 있습니다.왼: list Style미적용 / 오: GroupedListStyle 적용
ListStyle
ListStyle
을 사용하기위해서는List { ... }
/.listStyle()
처럼 리스트 밖에 스타일을 추가해줘야 합니다.ListStyle 종류
사실
ListStyle
의 종류는 다양하게 많이 있습니다. 일단IOS
에서 사용 가능한 스타일종류를 보자면 6가지 정도 됩니다.DefaultListStyle()
- 기본 리스트 스타일GroupedListStyle()
- 각 섹션을 분리된 그룹으로 묶어 표현하는 스타일InsetGroupedListStyle()
PlainListStyle()
- 데이터 목록을 각 행마다 하나씩 나열하는 형태의 기본 스타일InsetListStyle()
SidebarListStyle()
스타일을 확인 하기 위해 일단 코드를 작성해주도록 하겠습니다.
스타일 스크린샷을 확인해보면
Default
와Plain
은 똑같은 화면인 것을 확인 할 수 있는데,insetListStyle
도 똑같아 보이지만Default
/Plain
에 비해Header
부분Leading space
가 더 큽니다.Sidebar
리스트 스타일은 보시다시피 섹션을 접었다 펼 수 있는데,footer
부분은 사라지는것을 확인 할 수 있습니다.onDelete / onMove
List
내부에있는 텍스트를 옮기거나 삭제할 수 도 있습니다. 이것을 사용하려면.onDelete(perform: )
와.onMove(perform: )
를 사용하고 함수를 정의해줘야 합니다.onDelete 코드
SWIFT
onMove 코드
위 코드를 사용하기 위해서는
List
를NavigationView
로 감싸고, 그 옆에 EditButton을 추가해줘야 합니다. 이 버튼이 없으면Text
를 슬라이스 해서 삭제는 할 수 있지만Move
는 할 수 없습니다.Selection in Lists
목록 데이터의
Identifiable
단일 인스턴스에 바인딩합니다.Id
유형은 단일 선택 목록을 생성합니다.Set
에 바인딩하면 여러 선택 항목을 지원하는 목록이 생성됩니다.다음 예제 에서는 위 예제에 다중 선택을 추가하는 방법을 사용하려고 합니다. 목록 아래의Text view
에는 현재 선택된 항목 수가 표시됩니다.첫번째,
@State
변수를 추가해 줍니다.두번째,
NavigationView
를 생성 후List
에multiSelection
을 추가해줍니다.세번째,
NavigationBarTitle
을 이용하여 이름을 설정해주고, 그 옆에.toolbar { EditButton() }
를 추가해 선택 가능한 버튼을 만들어 줍니다.네번째, 화면 하단에 몇개가 선택 되었는지 표시해줍니다.
전체 코드
더보기
리스트의 여백 설정 listRowInsets
list
에는 기본적으로padding
이 들어가있습니다. 이미지를 적용시켜보면 더 쉽게 볼 수 있습니다. 이 여백을 설정하고 싶으면listRowInsets
를 사용하면 됩니다.예시와 함께 확인해보도록 하겠습니다.
우선
Mycard
라는 파일을 만들어서 아래와 같이 코드를 작성해주겠습니다.그리고
MyList
라는 새로운 파일을 생성해서 위 이미지를 호출합니다.위 코드에서
.listRowInsets(EdgeInsets.init())
가 있을 때 와 없을 때를 비교 해 볼 수 있습니다.Beta Was this translation helpful? Give feedback.
All reactions