일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Protocol
- collectionview
- ribs
- map
- UITextView
- Refactoring
- SWIFT
- 리펙토링
- RxCocoa
- Xcode
- uitableview
- uiscrollview
- Observable
- Clean Code
- tableView
- ios
- 애니메이션
- HIG
- combine
- 리팩토링
- swiftUI
- 스위프트
- 리펙터링
- rxswift
- UICollectionView
- swift documentation
- MVVM
- clean architecture
- Human interface guide
- 클린 코드
- Today
- Total
목록전체 글 (1539)
김종권의 iOS 앱 개발 알아가기
protocol 준수하는 모델 넘기기 ViewController에서 viewModel로 SomeModelable을 준수하는 모델을 넘겨야 하는 경우? 단, SomeModelable을 준수하는 모델은 여기서밖에 사용하지 않음 protocol SomeModelable { var a: Int { get } var b: String { get } } class ViewController: UIViewController { let viewModel = ViewModel() override func viewDidLoad() { super.viewDidLoad() viewModel.configure(model: /*여기!*/) } } class ViewModel { func configure(model: SomeMo..
tableView에 자동으로 설정되는 inset contentInsetAdjustmentBehavior 값은 os에서 자동으로 safe area를 고려하여 설정되는 getter 프로퍼티 open class UIScrollView : UIView, NSCoding, UIFocusItemScrollableContainer { @available(iOS 11.0, *) open var adjustedContentInset: UIEdgeInsets { get } ... } 이 값을 직접 set해줄수는 없기 때문에 "contentInsetAdjustmentBehavior"를 사용하여 조절이 가능 open class UIScrollView : UIView, NSCoding, UIFocusItemScrollableC..
UILabel의 높이 가져오는 경우 UILabel의 크기를 뷰가 다 그려지기 전에 static하게 알아와야하는 경우? UITableView와 UITableViewCell을 사용할때, 뷰가 다 그려지기 전에 모든 Cell의 크기를 알아와야하는 경우? (이때 만약 UILabel만 동적으로 변한다면 UILabel의 높이를 구해야하는 상황) UILabel의 높이 구하는 방법 sizeToFit()을 사용하여 구현 이 값을 사용하면 뷰의 내부 content크기에 맞게 즉각 계산됨 UIView의 extension 메서드이므로 UIView 계열은 모두 사용 가능 extension UIView { ... open func sizeToFit() } 알아내려는 UILabel의 속성을 그대로 주고 (text, numberOf..
@dynamicCallable 개념 Factory 패턴과 유사하지만 더욱 진화한 형태 한 예제로 enum으로 type을 명시하고, 메소드를 static으로하여 특정 값을 생성하는 유형 enum SomeModelFactory { static func make() -> Int {} } 아래에서 더 알아볼 dynamicCallable을 사용한 SomeModelFactory를 사용하면 별도의 메서드 호출 없이, 해당 인스턴스에 소괄호와 함께 값을 넣어서 바로 사용이 가능 값을 넣을때 argument label을 미리 모델에서 정의해준 값이 아닌 동적으로 아무 값이나 사용도 가능 (아래 c1(a:1, 2)) 예제에서 "a"값도 사용하는쪽에서 "b", "c" 아무런 값을 넣어도 무방 let c1 = SomeMode..
비즈니스 모델을 UI 모델로 변경하기 만약 MVVM을 사용한다면, API호출을 통해 얻은 데이터들을 ViewModel에서 받아오고 UI 쪽으로 다시 전달해주어야 하는데 정석으로는 UI / Domain / API 세 계층 모두 모델을 다르게하여 의존성을 줄이는 것이 이론적으로 좋은데 이 때 모델을 다르게하면 model간 변환하는 로직이 필요 Domain에서 UI모델로 데이터를 변환할 때, Factory 패턴을 사용하면 로직 분리가 용이 Factory라는 의미는 단순히 UI모델로 변경하는 작업 뿐만이 아닌, UI모델에서 필요한 값들도 같이 넣어주도록 구현 만약 api로부터 (age: 20)와 같은 값을 가져오는 경우 UI에서는 20살이라고 표현해야할 때 Factory에서 "20"과 "살"을 결합하여 생성하는..
url 파싱 아래와 같은 url이 있을 때, a1_b, a2같은 값을 파싱하는 방법? "abc://host?a1_b=1&a2=2" 보통 Swift의 Codable을 사용하여 API의 응답값들을 미리 struct로 정의하여 표현하는데 url 파싱도 이렇게 처리가 가능 // Codable을 사용한 API 응답 파싱 예시 struct SomeResponse: Codable { let age: Int let name: String } 구현 목적 딥링크를 구현하다보면 여러 url을 처리해야하는데, API의 응닶값처럼 url도 Codable을 준수하는 struct모델을 만들어서 정의되도록 구현하는 것이 목적 ex) 아래와 같은 url이 있을 때, parameter 2개에 대한 모델을 따로 정의하고 싶은 경우? le..
parameter packs 개념 Swift 5.9에서 등장 Swift 5.9미만에서는 아래와같이 여러개의 parameter가 있을때 이 parameter 개수만큼 그대로 튜플로 리턴해주고 싶은 경우 일일이 써주어야하는 번거로움이 존재 parameter packs를 이용하면 아래처럼 한줄로 표현이 가능 또 기존에는 여러개의 parameter를 갖는것은 ... 으로 받을 수 있지만 return type에는 ... 연산자를 사용하지 못함 func f1(v1: Int) -> Int { v1 + 1 } func f2(v1: Int, v2: Int) -> (Int, Int) { ((v1 + 1), (v2 + 1)) } func f3(v1: Int...) -> (Int...) { // Variadic parame..
Apple ID 인증 에러 아래와 같은 에러는 Xcode에서 Apple ID 로그인이 실패했다는 의미 만약 예전에 Xcode에 로그인을 하고 그 이후에 Apple ID 패스워드를 바꾸었을때 아래같은 에러가 발생 가능 Xcode > settings (cmd + ,) > Accounts 탭 > Sign In Again을 클릭하여 다시 로그인 할 것 성공하면 빨간 에러 메시지가 사라지고 이제 정상동작