| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- swift existential type
- swift bottomsheet
- scene delegate
- 버튼 피드백
- SWIFT
- coordinator
- BFS
- custom navigation bar
- swift dashed line
- task cancel
- Tuist
- swift associated type
- 드롭다운 버튼
- swift custom ui
- identifiable
- UIKit
- OAtuh 2.0
- uikit toast
- custom ui
- swift concurrency
- custombottomsheet
- DP
- swift navigationcontroller
- swift opaque type
- button configuration
- swift 점선
- task cancellation
- swift 백준
- reactorkit
- RxSwift
- Today
- Total
목록SWIFT (34)
김경록의 앱 개발 여정
개요https://roks-apps.tistory.com/88이전 포스팅에서 UIPopover + UITableView로 드롭다운 버튼을 만들었다가, 드롭다운이 펼쳐진 상태에서 좌측 엣지 스와이프(인터랙티브 뒤로가기) 를 하면 화면이 얼어붙는 이슈가 생겼다 - 드롭다운을 연 상태에서 뒤로가기 제스쳐를 할 경우 네비게이션 타이틀만 바뀌고 화면이 멈추는 버그증상드롭다운 버튼 탭 → 팝오버로 드롭다운 표시드롭다운이 열린 상태에서 좌측 엣지 스와이프로 뒤로가기 제스처 시작네비게이션 바 타이틀은 바뀌지만 뷰는 그대로, 터치도 먹지 않는 상태 발생원인원인 추적은 금방 가능했다 아마 화면 전환에서 문제가 생긴듯했다.presentedViewController(팝오버)가 떠 있는 동안 UINavigationControl..
개요신규 프로젝트에서 사유 선택을 위한 드롭다운 버튼이 필요했다.드롭다운 버튼이라는 게 사실 앱보다는 웹 환경에서 더 자주 쓰이는 UI 같지만,이번 프로젝트의 디자인은 웹 UI를 앱에 맞게 리디자인하는 과정이었기 때문에가능한 한 동기화를 시키려고 했다.처음 해보는 작업이라 구글링을 해봤는데, 대부분 서드파티 라이브러리를 이용해서 해결하고 있었다.하지만 이번 프로젝트는 SnapKit 외에는 서드파티를 쓰지 않는 것을 희망해서 배제하기로 했다우선 가장 간단해 보이는 방법을 찾았고, iOS 기본 컴포넌트인 UIMenu로 구현을 시작했다.UIMenu가 뭐지?UIMenu는 버튼을 탭 했을 때 메뉴 리스트를 보여주는 iOS 기본 컴포넌트다.iOS 14 이후부터는 버튼과 쉽게 결합할 수 있도록 API가 강화되어서,옵..
개요최근 스위프트 오픈 카톡방에서 '애플 로그인을 구현할때 서버가 필요한가요?' 라는 질문을 봤습니다.사실 이 질문은 단순히 기능 구현의 문제가 아니라, 소셜 로그인 방식의 작동 원리와 보안 구조를 제대로 이해하고 있는지를 보여주는 중요한 질문입니다. 소셜 로그인은 OAuth2.0 으로 지원된다.소셜 로그인(Google, naver, kakao 등)은 보통 OAuth 2.0으로 제공됩니다.OAuth는 무엇일까요?OAuth는 사용자가 아이디와 비밀번호를 직접 입력하지 않고도, 제 3의 앱이나 서비스가 권한 있는 방식으로 사용자 정보를 얻을 수 있도록 허용하는 표준 프로토콜 입니다.예를 들어 우리가 어떤 앱에서 Apple로 로그인을 누르면 Apple은 인증을 수행한 뒤 Auth를 사용하는 서비스(이하 '앱'..
Swift는 타입 안정성이 아주 강력한 언어입니다.특히 타입 추상화(type abstraction)와 관련된 기능들이 다양해서,제대로 활용하면 코드의 유연성과 재사용성이 크게 높아지죠.오늘은 그중에서도 뭔가 비슷한 것 같으면서도 분명히 다른 네 가지 기능을 정리해보려고 합니다:연관 타입 (associatedtype)제네릭 (Generic)불명확 타입 (Opaque Type)실존 타입 (Existential Type)어디에 어떻게 써야 할지, 어떤 차이가 있는지 살펴보고 그래서 '이게 왜 존재해야하는가'에 대해 개인적인 생각을 담아봤습니다.💡 한글 용어는 야곰님의 『스위프트 프로그래밍 4판』을 기준으로 사용했습니다.1. 🧩 연관 타입 (associatedtype) — 프로토콜 내부에서의 타입 추상화📌..
📢 cornerRadius란?cornerRadius는 iOS의 모든 UIView가 갖고 있는 CALayer의 속성 중 하나로, 뷰의 모서리를 둥글게 만들어줍니다. 숫자로 지정한 반지름(radius)만큼 모서리가 잘려 둥근 사각형 형태로 렌더링되죠. 예를 들어, 버튼이나 카드 뷰에 부드러운 곡선을 주고 싶을 때 유용합니다.let roundedImageView: UIImageView = { let imageView = UIImageView() imageView.backgroundColor = .systemBlue imageView.layer.cornerRadius = 12 // 모서리를 12pt 만큼 둥글게 imageView.clipsToBounds = true // 내부 콘텐츠가 ..
iOS 앱 개발자라면 누구나 익숙한 AppDelegate 방식. 앱 생명주기의 중심이었죠.그런데 이제는… Apple이 SceneDelegate를 강제하려고 합니다.정말 AppDelegate는 사라지는 걸까요?그리고 우리는 지금 무엇을 준비해야 할까요?🌀 SceneDelegate가 뭐길래?iOS 13부터 도입된 Scene 기반 Life Cycle은 앱을 하나 이상의 "Scene"으로 나누어 관리할 수 있게 해줍니다.간단히 말하면, 앱의 UI 상태를 독립적으로 관리할 수 있는 구조죠.예를 들어 iPad에서 여러 개의 앱 창(윈도우)을 동시에 띄울 수 있는 것도 Scene 구조 덕분입니다.🔥 그런데 왜 지금 이렇게 중요한가?Apple은 iOS 18.4부터 다음 조건을 강제합니다✅ Info.plist에 UI..
🔊 개요앱을 만들 때 Button은 필수적이고, 자동으로 터치 피드백을 제공합니다.(눌렸을 때 색깔이 바뀐다던가)하지만 종종 버튼을 눌렀을 때 아무런 반응이 없는 것처럼 보이는 문제를 겪게 되죠.그럴 땐 대부분 아래 이유 중 하나입니다.👇 1. AttributedString에서 색상을 직접 지정한 경우(configuraton 사용 시)configuration 사용 시 폰트를 지정할 때 AttriibutedString을 사용하게 됩니다.그때 foregroundColor 또한 지정이 가능하며 이것으로 글자색을 바꿀 수도 있습니다. let attributedTitle = AttributedString( "이미지", attributes: AttributeContainer([ .font..
풀이 아이디어그리디 알고리즘 문제입니다.조건을 떠올리면 바로 풀 수 있는 문제인데30의 배수라는 조건을 떠올려보면,일단 끝이 무조건 0입니다.또 각 자릿수의 합이 무조건 3의 배수입니다. 이 조건을 따른 자세한 풀이는 아래와 같습니다. 풀이let n = readLine()!let arr = n.map { Int(String($0))! }// 0을 가지고있고, 배열 총합이 3의 배수인지 확인합니다.if arr.contains(0) && arr.reduce(0, +) % 3 == 0 { //숫자를 뺄수있는 문제가 아니므로 그냥 무조건 정답입니다. //다른 순서대로 섞어도 결국 각자리 합이 3의 배수가 안나오면 30의 배수가 될 수 없음 let result = arr.sorted(by: >).map ..
✅ 두 가지 스타일의 내비게이션 바 사용현재 프로젝트에선 다음과 같은 구조로 내비게이션 바 스타일이 나뉩니다:루트(첫 번째) 화면 → 로고 및 아이콘을 포함한 커스텀 스타일그 이후 푸시된 화면들 → 시스템 스타일 기반의 일반 네비게이션 바🎛 커스텀 네비게이션 컨트롤러에서 공통 처리이미 앱 전반에서 사용되는 커스텀 내비게이션 컨트롤러(InteractivePoppableNavigationController)가 존재하므로, 여기에 스타일 설정을 통합합니다.SceneDelegate 또는 AppDelegate에서 내비게이션 컨트롤러를 초기화할 수 있습니다:// SceneDelegatefunc scene(_ scene: UIScene, willConnectTo session: UISceneSession, opti..
Identifiable이란 무엇인가?Swift의 Identifiable은 각 객체가 고유한 ID로 식별될 수 있도록 하는 프로토콜입니다. 이 프로토콜은 id라는 고유 속성을 요구하며, id는 Hashable 및 Equatable을 준수해야 합니다. 이를 통해 컬렉션 내에서 객체를 빠르게 구분하거나 중복을 방지할 수 있습니다.protocol Identifiable { associatedtype ID: Hashable var id: ID { get }}기본적으로 UUID나 Int, String 등 Hashable한 타입이면 id로 사용할 수 있습니다. 언제 써야 하는가?Identifiable을 언제 사용해야 하는지는 주로 객체의 고유성을 식별할 필요가 있는지에 따라 달라집니다. 다음과 같은 경우 ..