일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- stanford
- 오늘의 색상
- xml
- 스위프트
- 새싹후기
- UserDefault
- xcode
- ImageSlider
- UIKit
- 스터디
- collectionView
- process
- flutter #state # stateful #stateless
- 청년취업사관학교후기
- CS193p
- WidgetTree
- 프로그래머스
- 알고리즘
- SwiftUI
- 프로젝트회고
- flutter
- 조건문
- IOS
- GIT
- Swift
- MVVM
- 백준
- colorofdays
- 코딩테스트
- Masil
- Today
- Total
목록개발 이야기/Swift (36)
개발을 시작하는 이야기

2021년부터 Swift를 해온 나는 지금껏 Swift Package Manager (aka. SPM)를 사용해서 회사에가서 처음으로 Cocoa Pods을 마주했다. SeSac과정 진행중에 한번 설치하려고 했었으나 그당시 M1이 나오고 몇달 되지 않은 시기라 Homebrew도 겨우 설치했을 때였다. (물론 나의 어설픈 리눅스도 한몫 했지만) 그래서 Cocoa Pods도 마찬가지로 호환이 불안정했고 나를 비롯한 몇몇 M1유저들은 사용하지 못했었다. 아무튼 그런데 기존 프로젝트를 유지보수 및 업데이트를 해오다가 이번에 리팩토링을 추진하는 와중에 StoryBoard와 Code Base를 두고 고민을 하는데, 문득 Cocoa Pods과 SPM은 차이가 있을까? 그리고 혼용해서 사용해도 괜찮을까? 같은 의문이 들..

원래는 카카오맵 연동을 먼저 쓰려고 했는데 연동까지는 했는데 그 활용이 아직은 좀 더 해봐야 해서 일단 먼저 작성한 전화 연결을 먼저 작성해봄. iOS는 URL Scheme를 활용하여 메일, 전화, 문자 FaceTime등을 연결할 수 있었다. Apple Developer Documentation developer.apple.com URL Scheme 적용 방법 URL Scheme 문자열을 통해 URL 인스턴스를 만들어주고, canOpenURL(_ :) 메서드를 활용해서 URL 체계를 처리할 수 있는지 여부를 확인한다. let url = ... func canOpenURL(_ url: URL) -> Bool Apple Developer Documentation developer.apple.com 사용 가능..

지난번 글에 이어서 ProgressView 부터 이제는 ProgressView에서 Cell의 순서에 맞게 표시해주도록 설정을 해주어야 한다. Apple Developer Documentation developer.apple.com 일단 progress에서 현재 상황을 알려줄 변수를 하나 작성해주었다. //MARK: - Data var progress: Progress? 그리고 이제 진행상황에 맞추어 completedUnitCount를 업데이트 해주면 된다. 하지만 이때 주의할점은 최초 로드시에는 0이 아닌 1이여야 한다. 처음 로드하게 되면 첫 페이지가 보여지고 있어야 하기 때문이다. private func configureProgressView() { progressView.progress = 0.1 ..

면접에서 내 프로젝트들을 보시곤 이미지 슬라이드를 해본적은 없냐는 질문을 받아서 아직 이미지를 대량으로 받은 적이 없어서 적용을 안해보았고, 웹으로는 해보았다고 말씀드렸었다. 그래서 이번에 프로젝트를 생각할 때 슬라이드를 해봐야 겠다고 생각했지만, 웹과 앱은 달랐기 때문에 제로 베이스에서 다시 생각해서 작성했다. 일단 웹에서 슬라이드를 만들 때는 이미지 만큼의 div를 만들어서 회전시키는 방식으로 작성했는데, 앱에서는 그렇게 해주기 보다는 CollectionView를 사용하기로 했다. 그래서 일단은 ViewController에 CollectionView, 그리고 슬라이드 위치를 표시해줄 ProgressView를 만들어주었다. private var collectionView: UICollectionView..

노트북의 지저분한 파일들을 정리하다 보니 아직 GitHub을 스치듯 지나가며 듣기만 했을 때, Web 마크업 언어를 공부할 때 만들었던 프로젝트가 눈에 띄었다. 지금이야 Xcode에서 GitHub와 연동해서 프로젝트를 시작하는 순간부터 지속적으로 관리해주기 때문에 편하게 사용했지만, Xcode가 아닌 다른 프로젝트를 그것도 완성되어 있는 프로젝트를 업로드하는 건 또 처음이라 찾아보고 적용했다. 흔치 않는 일이기 때문에 나중에 잊었을 때 다시 찾기 편하게 하기 위함과, 깃 헙과 연동하는 도중에 겪는 다양한 에러들을 정리하려고 포스팅한다. 1. 프로젝트 폴더 내 git init 생성 [윈도우가 설치된 노트북에서 진행했기 때문에 git bash를 활용했음] [mac에서는 터미널로도 가능할 것 같은데 확인해보고..

Swift 스터디에 참여해서 첫 자기소개 시간들을 갖게 되었는데 공유된 글에서 흥미로운 내용이 있어서 정리해둘겸 가져오게 되었다. Swift에서 set, array, string을 사용하면서 값이 비어있는 경우를 추적할때 보통 다음과 같은 코드를 사용하곤 한다. let string = "" if string.count == 0 { print("There are no String") } string의 길이를 체크해서 0인 경우를 판단하는 코드로 위 코드만으로도 정상적으로 작동한다. 하지만 더 보기 좋고 깔끔하고 효율적인 코드가 있다. let string = "" if string.isEmpty { print("string is Empty") } 스위프트의 String 타입에서 count 대신 isEmpty..

강의 보기 : YouTube :: Stanford URL과 Image를 Drag & Drop 이모지 외에도 배경을 Drag & Drop 할 수 있기 때문에 URL이나 Image가 드롭되었을 때 이를 받을 수 있어야 한다. private func drop(providers: [NSItemProvider], at location: CGPoint, in geometry: GeometryProxy) -> Bool { var found = providers.loadObjects(ofType: URL.self) { url in document.setBackground(EmojiArtModel.Background.url(url)) } if !found { found = providers.loadObjects(ofTy..

강의 보기 : YouTube :: Stanford Collections of Identifiable Identifiable A class of types whose instances hold the value of an entity with stable identity. 인스턴스가 안정적으로 구분될 수 있는 엔티티 값을 가지도록 하는 타입의 클래스 func choose(_ card: Card) { if let index = cards.firstIndex(where: { $0.id == card.id }) { cards[index].isFaceUp = true } } Color vs UIColor vs CGColor Color color-specifier : foregroundColor(Color.gree..

강의 보기 : Youtube :: Stanford rotation3DEffect 카드를 선택했을 때 fade 효과나 scale 같은 효과가 아닌, 카드를 뒤집는 효과를 주기 위해 Cardify의 ZStack에 rotation3DEffect 효과를 주었다. 뒤집는 효과를 주기 위해 axis의 y축에만 효과를 주었다. 카드는 정상적으로 뒤집을 수 있지만 다른 곳에서 문제가 발생했다. 카드를 뒤집기 시작하는 순간부터 카드가 미처 다 돌아가지 않았음에도 이모지가 서서히 나타나기 시작하는 문제가 발생했다. 이는 이모지를 보여주는 content를 opacity효과를 주면서 (isFaceUp ? 1:0)의 변화에 의존하기 때문이다. struct Cardify: ViewModifier { var isFaceUp: Bo..

강의 보기 : Youtube :: Stanford Animation 애니메이션 효과는 변화가 발생했을 때만 나타난다. 1. View가 이미 UI에 들어가 있는 상태에서 ViewModifier의 인자가 바뀌었을 때 2. shape가 바뀌었을 때 3. UI 내부의 View가 생기거나 사라질 때 UI상의 View container에 추가되는 경우 UI상의 View container에 제거되는 경우 if-else, ForEach문 애니메이션을 실행하는 세 가지 방법 Implicit Animation .animation(Animation) View Modifier를 이용한 방식 duration, delay, repear, curve 등 직접 지정할 수 있다. .animation 앞의 모든 View Modifier..