Replies: 1 comment
-
구리스, 좋은 경험 공유 감사해요. Class의 시대에 살던 저는 sort 에 더 익숙했는데, Struct의 시대가 오면서 sorted 처럼 오브젝트를 copy해서 리턴하는 함수가 좀 낯설었답니다. 그럼 추가적으로, sorted를 할 때, 구리스가 작성한 코드의 challenge.notes 는 deep copy 가 될까요? shallow copy 가 될까요? 🤔 |
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
-
Swift의 sort와 sorted를 알아보자!
안녕하세요. 애플 디벨로퍼 아카데미 3기 구리스입니다.
NC1을 진행하면서 생겼던 트러블 이슈와 이를 해결했던 경험에 대해 공유하고자 첫 글을 작성해봅니다 :)
앞으론 빨리빨리 글을 쓰는 습관을 .. 가져보도록 하겠습니다!
Problem
각 챌린지별로 여러개의 노트를 보여주는 뷰를 짜는 도중에, 해당 노트의 제목은 day~로 등록되게 했습니다.
![image 48](https://private-user-images.githubusercontent.com/102604192/326846671-512c1535-32a9-465f-bb6c-be3b5983b24c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzE5MDcsIm5iZiI6MTczOTE3MTYwNywicGF0aCI6Ii8xMDI2MDQxOTIvMzI2ODQ2NjcxLTUxMmMxNTM1LTMyYTktNDY1Zi1iYjZjLWJlM2I1OTgzYjI0Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQwNzEzMjdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mNWVmMzI5MGI1ZmFhY2JiMTQ5OTdjYmJkYTQ5NTg1NjU0NjkzZTQwMjg2ZWViNzA1MDBlYmZmNDFhYWMxNDYyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.X834_af9bOVutfBvO__dCgY83aeImZgF5vLhS_mQVDY)
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