iyOmSd 179

[Swift] Image Resize

이미지가 커서 메모리를 많이 잡아먹다보면 메모리부족으로 앱이 죽어버리는 경우가 생기죠..! 이러한 현상을 줄이고자 이미지 사이즈를 줄여서 다시 만들어내는데 그 작업을 해볼까해요 이미지작업을 위해서 사용할 클래스부터 알아볼게요 UIGraphicsBeginImageContext 와 UIGraphicsImageRenderer 가 있는데요둘의 차이는 구식과 신식의 차이에요 UIGraphicsBeginImageContext iOS2+ SRGB 포맷 스택을 사용해서 처리하는 것 같더라구요 UIGraphicsBeginImageContext을 이용해서 context를 생성해주고 원하는 처리를 해주고 UIGraphicsGetImageFromCurrentImageContext를 이용해서 context에 적용된이용해서 이미..

iyOmSd/Title: Swift 2021.05.29

[속닥속닥] 음성 롤링페이퍼 서비스

https://apps.apple.com/app/id1557251130 ‎속닥속닥 - 롤링페이퍼 앱 ‎하이 에이치 아이~! 민지 GO야! 지금 우리가 뭐하고 있냐고? 바로 롤.링.페.이.퍼! ʕっ•ﻌ•ʔっ 말하기 어려웠던 고민부터 시시콜콜한 안부까지 하고싶었던 말을 롤링페이퍼를 통해서 남겨봐~ apps.apple.com 최근에 동아리에서 제작하게된 앱이구요! 코로나시대..라서 만나지못하니까 ㅠㅠ.. 앱으로 놀 수 있지않을까 생각에서 시작했어요 음성 롤링페이퍼지만 다양하게 놀 수 있는 방법이 있죠 팀원은 iOS3 안드3 스프링4 디자인2명으로 총 12명 이구요 개발기간은 2021.01.09 ~ 2021.04.23 약 4개월 정도 개발했네요 너무 귀엽게 잘나온 앱이에요 디자이너 분들 최고... 개발하면서도 ..

[유니뷰] 대학교 공지 알림 서비스

https://apps.apple.com/app/id1534315470 ‎유니뷰 - 대학교 공지사항 한눈에 보고, 알림까지! ‎쉽게 지나쳤던 공지사항을 이젠 유니뷰로 빠르고 편리하게 확인해보세요! 1. 공지사항 열람 우리 학교 모든 공지사항을 한 번에 볼 수 있어요! 각종 공지사항을 탭으로 넘겨 편리하게 확인할 apps.apple.com 동아리에서 좋은팀을 만나서 동거동락하며 재밌게 개발했고 동아리가 끝난 이후에 팀끼리 또 프로젝트를 하자는 제안으로 시작했구요 한 친구가 기존에 안드로이드 버전으로 만들어둔 앱이있었고 기존 기능에 새로은 기능을 더하고 UI도 확 바꿔서 안드로이드는 새단장을 하고 iOS는 없기때문에 새로 개발해서 배포를 하기로 한 토이프로젝트에요 제가 졸업을 한 후라서 아쉽지만 제가 학생이..

[Swift] UITableViewDiffableDataSource

iOS13+에서 사용할수 있는 API구요 WWDC19에서 소개됬고 TableView 및 CollectionView의 데이터의 업데이트를 쉽게 도와주는 역할이에요 보통 사용하고 있는 DataSource를 이용한 방식은 numberOfItemInSection cellForItemAt 와같은 함수를이용해서 위의 형식처럼 컨트롤러에게 섹션이몇개니? Cell이 몇개니? Cell은 어떻게 생겻니? 물어보면서 설정했었죠 설정이후 서버통신을 통해서 데이터를 불러와서 다시 업데이트를 진행하는과정에서... 아래처럼 에러가 나기도하죠 WWDC를 보면서 피식하기도하네요 🤣 이러한 문제점을 잡아서 새로 나온 것이 Diffable Data Source 입니다! 무엇이 더 좋은가~? TableView를 업데이트 하려했다면 begi..

iyOmSd/Title: Swift 2021.05.01

[Swift] UICollectionViewCompositionalLayout

WWDC19에서 소개된 내용이에요 CollectionView의 Layout을 커스텀하기 쉽게 만들어주는 역할을 해줘요 iOS13+ 에서 사용할 수 있는 API구요 들어가기앞서 이 레이아웃을 사용하기위해서 기본적으로 알아야할 개념들이있어요 NSCollectionLayoutSize NSCollectionLayoutItem NSCollectionLayoutGroup NSCollectionLayoutSection 여기에 추가적으로 NSCollectionLayoutSupplementaryItem NSCollectionLayoutBoundarySupplementaryItem 까지! (이부분은 헤더뷰 푸터뷰 필요없으면 안보셔도 OK) 왜알아야해...? UICollectionViewCompositionalLayout를..

iyOmSd/Title: Swift 2021.04.27

[Swift Algorithm] 64064 불량 사용자 (2019 카카오 인턴십)

programmers.co.kr/learn/courses/30/lessons/64064코딩테스트 연습 - 불량 사용자개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 풀이방법먼저 불량사용자에 해당하는 유저아이디를 이차원배열의 형태로 모두 저장했어요["frodo", "fradi", "crodo", "abc123", "frodoc"], ["fr*d*", "abc1**"]주어진 예시가 위의 형태라면[[frodo, fradi], [abc123]]이렇게 저장되어있겟죠여기서 저는 문자열로 저장하지않고 간단하게 비교하기위해 인덱스를 사용했어요result ..

[Swift Algorithm] 투 포인터 알고리즘

투 포인트 알고리즘은 구간의 합같이 구간을 비교할 때 효율적으로 사용할 수 있는 알고리즘이에요 보통 for문 중첩을 통해서 O(N^2)시간초과로 인해서 사용하구요 이 알고리즘의 시간복잡도는 O(N)으로 한번의 순회에 조건을 찾을 수 있어요 구간을 비교하면서 원하는 조건에 달성할때까지 먼저 end를 움직인 다음 start를 하나씩 이동하면서 구간을 좁혀가며 조건을 확인해요 조건에 해당하지않게되면 end가 배열의 끝까지 이동했는지 확인하고 끝까지 가지않았다면 end를 하나씩 이동하며 다시 start와 비교하는 과정을 거쳐요 . . . . 예를 들어서 sum이 10이상인 구간을 찾는데 그 중에서 제일 빠른 구간을 찾는다고 할게요 초기상태의 배열은 처음과끝이 같고 현재합은 1이죠 다음으로는 end를 이동시키면서..

[Swift Algorithm] 64062 징검다리 (2019카카오 겨울인턴십)

programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 풀이방법 범위가 2억이기때문에... 그냥풀면 분명이 시간초과가 걸릴거라고 생각...햇고.. 1명씩 건너도록 단순하게 푼경우.. 역시나 시간초과에 걸린... private func solutionP64062(_ stones:[Int], _ k:Int) -> Int { var stones = stones var isJump = true var result = 0 while true { var zeroCount = 0 for stone in stones { if stone = k { isJump..

[SwiftUI] 뷰 상태변경 @State @Binding @ObservedObject @StateObject

SwiftUI를 사용한다면 꼭 알아야할 Property Wrapper중 상태변화에 대한것을 알아보려고해요 @State UIKit에선 Property Observer를 통해서 변화가 일어나면 뷰를 업데이트시키는 방식을 사용했지만 SwiftUI에선 @State라는 프로퍼티 래퍼를 통해서 같은 일을 할 수 있어요 @State로 선언된 변수의 값이 변할 때 View를 다시 계산해서 그려줘요 주의사항으로는 View의 body에서만 @State변수에 접근해야해요 즉, private 선언이 따라오는것을 권장하고 외부에서 이 변수에 접근하면 안돼요 경고문, 텍스트필드, 편집모드같이 현재화면의상태를 잠깐 나타내거나 간단한 View의 상태를 나타낼 변수를 선언하는데 적합하죠 SwiftUI에서 View는 struct형태로 ..

[Data Structure] Priority Queue 우선순위 큐

우선순위 큐는 힙구조로 이뤄져있죠 힙구조란 완전이진트리이고 정렬기준에맞춰서 최댓값이나 최솟값을 빠르게 찾아낼 수 있어요 새로운 노드를 넣을땐 제일 끝에서 추가해서 자신의 부모의 인덱스인 (index-1)/2와 비교해서 거꾸로 올라오면서 조건에 맞는지 비교하며 교체가 일어나구요 (logn) 삭제할 때는 제일 위부터 아래로 가면서 다시 정렬하면서 교체하는 과정이 일어나요 (logn) struct PriorityQueue { var heap: [T] = [] let ordered: (T, T) -> Bool init(ordered: @escaping (T, T) -> Bool) { self.ordered = ordered } /// 큐 뒤에 요소 추가 mutating func enQueue(_ element:..