inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[Lv.1] iOS 17 앱 개발 기초 - SwiftUI로 시작하기

ViewModel

index와 indexSet

해결된 질문

60

최수훈

작성한 질문수 8

0

fruitArray 를 delete하는 함수에서

index가 아닌 indexSet과 remove(at:)이 아닌 remove(atOffsets:)를 사용하셨는데 왜 그렇게 하셨는지 궁금합니다!

ios swift swiftui 카카오공채-개발

답변 2

0

Jacob(제이콥)

Index와 IndexSet 차이점 설명

안녕하세요 최수훈님, indexIndexSet의 차이점에 대해 설명해드릴게요.

Index vs IndexSet 차이점

1. Index (Int 타입)

// 하나의 숫자만 가리킴
let index = 2  // 배열의 2번째 요소
fruitArray.remove(at: index)  // 하나만 삭제

2. IndexSet

// 여러 개의 인덱스를 담을 수 있는 집합
let indexSet: IndexSet = [0, 2, 4]  // 0번, 2번, 4번 요소들
fruitArray.remove(atOffsets: indexSet)  // 여러 개 동시 삭제

왜 remove(atOffsets:)를 사용하나요?

SwiftUI의 List에서 .onDelete를 사용할 때는 사용자가 여러 행을 선택해서 한 번에 삭제할 수 있기 때문입니다.

List {
    ForEach(fruitArray, id: \.name) { fruit in
        Text("\(fruit.name) - \(fruit.count)개")
    }
    .onDelete(perform: deleteFruit)  // 여기서 IndexSet이 자동으로 전달됨
}

실제 동작 예시

사용자가 편집 모드에서:

  • 딸기(0번), 바나나(2번)를 동시 선택 → IndexSet [0, 2]가 전달

  • 한 번에 여러 개 삭제 가능

정리

구분 Index (Int) IndexSet 용도 단일 항목 삭제 다중 항목 삭제 메서드 remove(at:)remove(atOffsets:) 값 예시 2[0, 2, 4]

감사합니다

제이콥

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 최수훈님.

SwiftUI에서 List를 사용할 때, 아이템을 삭제하기 위해 잘못된 인덱스를 사용하면 크래시가 발생할 수 있습니다. 따라서 안전하게 여러 항목을 한 번에 삭제하는 편리한 방법을 제공하기 위해 IndexSetremove(atOffsets:) 메소드를 사용합니다.

왜 IndexSet을 사용하나요?

IndexSet은 컬렉션에서 여러 항목의 인덱스를 나타내는 타입입니다. List에서 onDelete 메소드를 사용할 때 IndexSet을 제공받게 되며, 이를 통해 사용자가 삭제하려는 모든 항목의 인덱스를 받을 수 있습니다. IndexSet은 단일 인덱스가 아닌, 범위나 여러 인덱스를 포함할 수 있어, 컬렉션에서 여러 항목을 안전하게 삭제할 수 있도록 돕습니다.

remove(atOffsets:) 메소드

‘remove(atOffsets:)’ 메소드는 IndexSet을 받아 해당 인덱스에 위치한 항목들을 컬렉션에서 제거합니다. 예를 들어, fruitArray.remove(atOffsets: indexSet)fruitArray에서 지정된 오프셋에 있는 요소들을 제거합니다. 이는 SwiftUI의 List와 같은 동적인 뷰에서 사용자 인터페이스와 데이터 간의 동기화를 도와줍니다.

관련될 수 있는 질문과 기존 답변을 추가적으로 확인하고 싶다면 아래의 링크를 참고하시기 바랍니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

소리가 ㅠㅠ

0

54

2

NavigationBarItems Deprecated

0

96

3

Xcode version 문제

0

195

2

GalleryView 작성시, @State? @Bidnable? 의 차이점이 뭔지 궁금합니다.

0

303

2

페이지 이동에 관해 질문이 있습니다 !

0

339

2

scrollTransition 에서 phase 값을 찍어보고 싶습니다.

0

277

2

갤러리에서 슬라이더 변경시 gridSwitch 가 두번 실행됩니다.

0

307

2

유튜브 영상 플레이시 워닝 이슈 문의

0

521

1

ListBasic 강의 문의 - 딸기 id 오류 및 move 오작동

0

222

1

LazyGrid 강의 문의 - 데이터가 30개 인데 로우가 3줄이면 27개만 노출됨

0

269

1

ScrollView에서 질문 있습니다.

0

288

1

MVVM에서 처음

0

217

1

ExtractView, @Binding 강의에서 .previewLayout(.sizeThatFits) 함수 관련해서 질문드립니다.

0

336

2

iOS 15 버전이후 프리뷰 문제 관련해서 질문드립니다.

0

344

2

VStack으로 프리뷰 생성

0

394

2

MVVM 폴더 안에서 Preview가 작동하지 않습니다.

0

249

1

Preview 질문

0

415

2

LazyGrid 질문 있습니다.

0

338

1

Textfield 입력시 한글 자음 모음 분리 현상이 발생 합니다

1

6534

2

Sheet가 바로 닫히는 문제와 홈 화면 액션 관련 문의

0

290

1

NavigationView를 NavigationStack 으로 변경관련입니다.

1

359

1

Frame 강의에서 다른 결과물이 나와요

0

390

1

Frame에 대한 개념 질문

0

253

1

ShareLink에서 이미지 링크에서 이미지 크기 제한이 있나요?

0

319

2