Replies: 2 comments
-
구리스, 좋은 경험 공유 감사해요. Class의 시대에 살던 저는 sort 에 더 익숙했는데, Struct의 시대가 오면서 sorted 처럼 오브젝트를 copy해서 리턴하는 함수가 좀 낯설었답니다. 그럼 추가적으로, sorted를 할 때, 구리스가 작성한 코드의 challenge.notes 는 deep copy 가 될까요? shallow copy 가 될까요? 🤔 |
Beta Was this translation helpful? Give feedback.
0 replies
-
한 번 정렬을 한 다음에, 지울 때 또다시 정렬한다. 조금 부자연스럽지 않던가요? |
Beta Was this translation helpful? Give feedback.
0 replies
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.
-
Swift의 sort와 sorted를 알아보자!
안녕하세요. 애플 디벨로퍼 아카데미 3기 구리스입니다.
NC1을 진행하면서 생겼던 트러블 이슈와 이를 해결했던 경험에 대해 공유하고자 첫 글을 작성해봅니다 :)
앞으론 빨리빨리 글을 쓰는 습관을 .. 가져보도록 하겠습니다!
Problem
각 챌린지별로 여러개의 노트를 보여주는 뷰를 짜는 도중에, 해당 노트의 제목은 day~로 등록되게 했습니다.

day 뒤에 오는 숫자는
Note.number
로 관리되게 하고 해당 값으로 정렬하여 노트들이 보일 수 있도록 했습니다.Note.number
로 오름차순 정렬하기 위해challenge.notes.sorted(by: { $0.number < $1.number })
로 코드를 구현했습니다.이때 생겼던 이슈는
onDelete
로 노트를 삭제할 때 제가 스와이프 했던 노트가 삭제되는 것이 아닌, 다른 노트가 삭제되는 이슈가 있었습니다.어떻게 해결해야할지 큰 어려움이 있었고 index로 delete를 접근해서 그런건가..? 라는 고민이 많이 있었습니다.
Solution
NC1 체크인 타임에 제가 겪고 있는 이슈를 공유했고, 오후 러너분 중 보노라는 분이 저의 이슈를 해결하러 와주셨습니다!! (샤라웃 보노🦭)
제가 List-ForEach 안에 사용한 sorted가 문제가 된 것 같다고 말씀해주셨습니다.
sorted
는 배열 안의 객체의 index자체를 변경하여 정렬시켜주는 것이 아닌 정렬된 배열만을 반환해주는 것이었습니다.그렇기 때문에 원본 배열의 index는 변경되지 않고 정렬된 사본 배열을 반환한 것이라
onDelete
해줄 때의 index와 매칭이 안된 것이었습니다 ! ! !따라서 저는 onDelete 내의 index를 다시 오름차순으로 sorting하여 삭제 요청을 받은
indexSet
의 첫번째 index인 Note.number를selectedIndex
에 저장하고,selectedIndex
와challenge.notes
배열 안의 객체의 number가 같은 객체를 모두 삭제하도록 구현했습니다.Learning
sort
와sorted
sort
: 원본 배열을 기본적으로 오름차순으로 정렬합니다.내림차순으로 정렬하고 싶다면
sort(by: >)
를 사용합니다.sorted
: 원본 배열은 건드리지 않고 사본을 만들어서 정렬된 배열을 반환합니다.내림차순으로 정렬하고 싶다면
sorted(by: >)
를 사용합니다.List-ForEach를 통해 리스트를 구현할 때 정렬을 하고 싶다면 해당 부분을 고려해보면 좋을 것 같습니다!!
+)
indexSet
이 아닌item
으로 접근하여 리스트 내 객체를 삭제할 수 있는swipeAction
도 있다는 말을 들었습니다!!다양한 방법으로 리스트 내 객체를 삭제하는 방법이 있다는 걸 알게 되었습니다.
잘못된 설명이 있거나 추가하고싶은 내용 있으시면 언제든지 댓글 달아주세요! 😊
Beta Was this translation helpful? Give feedback.
All reactions