일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- rxswift
- ios
- 애니메이션
- SWIFT
- Xcode
- swift documentation
- uiscrollview
- 클린 코드
- 리펙토링
- Clean Code
- Human interface guide
- UITextView
- Refactoring
- 리펙터링
- RxCocoa
- Observable
- tableView
- MVVM
- collectionview
- map
- Protocol
- combine
- 리팩토링
- ribs
- 스위프트
- swiftUI
- UICollectionView
- uitableview
- clean architecture
- HIG
- Today
- Total
목록분류 전체보기 (1640)
김종권의 iOS 앱 개발 알아가기
Optional에서의 map, flatMap 개념 보통 map, flatMap은 Collection Type에서 사용하지만, Optional 내부를 보면 함수로 map, flatMap이 존재 @frozen public enum Optional : ExpressibleByNilLiteral { case none case some(Wrapped) @inlinable public func map(_ transform: (Wrapped) throws -> U) rethrows -> U? @inlinable public func flatMap(_ transform: (Wrapped) throws -> U?) rethrows -> U? } map 개념 Optional 타입에 nil이 아닌 값이라면, Optional..
UIKit framework 저장 경로 find 명령어를 통해 탐색 % find /Applications/Xcode.app -name UIKit.framework 탐색 결과 /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/UIKit.framework /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework /Applications/Xco..
Optional 타입 Optional 타입은 제네릭스를 받고, 그 제네릭스는 Optional 안에 감싼 값을 의미 Optional 타입은 enum이며, 2개의 case가 존재 none: 값이 없는 case some(Wrapped): 값이 있는 case enum Optional: ExpressibleByNilLiteral { case none case some(Wrapped) } 조건문에서 unwrap 방법 .some으로 접근 변수?로 접근 let optionalString = Optional("jake") switch optionalString { case .none: print("this is nil") case let .some(value): print("some value = ", value) } ..
enum에 공통 변수가 필요한 경우 ColorType이라는 enum이 있고 color타입들을 분류하는 case들을 나타내는 경우 여기에 defaultColor도 다 갖고 있게 하고싶은 경우? enum ColorType { case blue case black case green } ex) 단순히 associated type으로 설정 선언하는 곳, 사용하는 곳 모두 일일이 다 써줘야 하므로 복잡한 코드가 됨 enum ColorType { case blue(defaultColor: UIColor) case black(defaultColor: UIColor) case green(defaultColor: UIColor) } (사용하는쪽) let colorType = ColorType.blue(defaultCol..
프로토콜로 리펙토링하는 아이디어 리펙토링의 핵심: 기존에 있는 코드에 영향을 최소화 하는 것 리펙토링 대상에 해당하는 interface들을 모두 protocol을 만들어서 선언 기존에 있던 리펙토링 대상의 인스턴스에 protocol을 타입을 따르고 기존 구현체를 대입 protocol을 준수하는 새로운 구현체를 구현하여 기존것과 변경 리펙토링 전 코드 예제 ex) LogModel이라는 기능이 있고 이 모델을 2곳 이상에서 사용하고 있을때 LogModel내부 코드를 리펙토링 하고 싶은 경우? LogModel은 UI를 탭한 카운트를 기록하는 모델 struct LogModel { private var countOfTap = 0 private var latestDate: Date? mutating func ad..
over가 붙은 것과 붙지 않은 것의 차이 over가 붙은 것은 띄우는 VC의 view들을 날리지 않고 바로 띄우는 것이고, over가 붙지 않으면 띄우는 VC의 뷰들을 날림 파란색 VC를 fullScreen로 띄운 경우 이전에 있던 UIView들을 날림 (아래 사진에서 두 개의 UITransitionView가 있을 때, 첫 번째 UITransitionView의 UIDropShadowView의 View들이 날아감) 파란색 VC를 overFullScreen으로 띄운 경우 파란색 VC앞에 있던 뷰들이 사라지지 않고 유지되어 있음 -over를 붙이면 앞전의 view들이 사라있고, -over를 붙이지 않으면 view들이 사라짐 -> 띄울 VC에서 viewWillAppear 프린트를 찍을때, 파란색 VC를 dis..
디버깅 UserDefaults 간편 세팅 앱을 실행할때마다 특정 UserDefaults값을 매번 세팅해주고 싶은 경우? Arguments Passed On Launch 사용하면 UserDefaults에 항상 입력한 값으로 초기화가 가능 Xcode > Edit Scheme 클릭 왼쪽 탭에서 Run 선택 > 위 탭에서 Arguments 선택 > Arguments Passed On Launch > +버튼 클릭 - 짝대기를 붙이고, userDefaults에 저장될 이름을 입력하고난 후 공백을 두고 값 입력 -{name} {value} 사용할때 userDefaults로 접근이 가능 접근할떄는 - 짝대기를 제외한 이름으로 접근 class ViewController: UIViewController { override..
네임스페이스 정의 방법 nested-type으로 여러 타입을 지정하고 싶은 경우, 보통 아래처럼 class타입 안에 class로 지정하는 경우가 있지만 이렇게 되면 DesignSystem1이라는 클래스 안에 여러가지의 nested-class가 많아지는 구조로 번식 또 DesignSystem1은 class타입이므로 불필요한 생성자가 존재 public class DesignSystem1 { public class RadioButton { } } 단순히 namespace만 관리할 목적이고 생성자가 필요 없으므로 enum을 활용 // DesignSystem.swift public enum DesignSystem { public class RadioButton { } } 또한 namespace를 정의할 때는 위처..