일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Human interface guide
- rxswift
- Observable
- Refactoring
- Xcode
- Protocol
- HIG
- uiscrollview
- clean architecture
- Clean Code
- map
- UITextView
- 리펙토링
- 클린 코드
- UICollectionView
- uitableview
- 애니메이션
- 리팩토링
- MVVM
- ribs
- collectionview
- swiftUI
- swift documentation
- 스위프트
- combine
- RxCocoa
- 리펙터링
- ios
- tableView
- SWIFT
- Today
- Total
목록iOS 기본 (swift) (149)
김종권의 iOS 앱 개발 알아가기
인덱싱으로 배열을 쪼갰을때 SubSequnce(=ArraySlice형) let array = [1,2,3,4,5] // [Int] let first = array[..
인라인의 개념 swift에만 있는 기능이 아닌, 일반적으로 프로그래밍 언어에 있는 기능 컴파일러 최적화에서 사용 인라인이란, 메서드 호출을 해당 메서드의 본문으로 대체하는 컴파일러 최적화 방법 일반적인 메소드를 호출하는 작업: 스레드에 있는 스택 테스크(추적, 앱 상태 전송, 저장, 변경)하는 과정이 존재 (장점 - 디버깅 용이, 단점 - 오버헤드) 인라인을 사용한 경우, 메소드 호출: 스택을 따로 추적하지 않고 메소드의 본문을 바로 가져다가 사용 (장점 - 오버헤드 감소, 단점 - 함수 body가 재귀 호출과 같은 반복이 있는 경우에는 더 비효율적) ex) 인라인의 개념 예제 인라인이 적용되지 않은 것 override func viewDidLoad() { super.viewDidLoad() self.p..
이미지 다운로드 저작권이 없는 Pixabay에서 이미지 다운로드 이미지를 자르는데 필요한 크기는 1024 * 1024 이므로 이것보다 큰 이미지 사이즈로 다운로드 이미지를 다운로드하고 난 후 App Icon Generator에서 이미지 추출 Generator 클릭 > 다운로드 AppIcons/Assets.xcassets/AppIcon.appiconset에 앱 아이콘 이미지 존재 Xcode에 앱 아이콘 적용 Assets -> AppIcon -> Show in Finder 클릭 AppIcon.appiconset 디렉토리 진입 이곳에 아까 받았던 파일들을 복붙 Xcode에서 적용된 것을 확인 * 링크 - 저작권 없는 이미지 다운로드: https://pixabay.com/ko/ - 앱 아이콘 생성: https:..
* 코드로 UI 작성에 편리를 위해 사용한 프레임워크 - SnapKit - Then pod 'SnapKit' pod 'Then' Done 버튼 탭 시 동작 아이디어 Done 버튼을 탭하게 되면, escape string 값 '\n' 입력으로 처리되는 형태이므로, textField(_:shouldChanceCharactersIn:replacementString:) 델리게이트에서 처리 `\n`값을 받은 경우, 입력되는 처리를 한 후 false를 리턴하여, \n 입력을 막는 형태 UI 준비 Done버튼이 눌렸을 때 UILabel에 값을 입력하는 형태 UILabel - 텍스트 필드의 결과값 입력 textField - 인풋 // ViewController.swift import UIKit import SnapKi..
LocalizedError 오류에 대한 발생 이유를 설명하는 오류 프로토콜 해당 프로토콜을 준수하고, computed property인 `public var errorDescription: String?`를 정의하면, 사용하는쪽에서 .localiedDescription사용이 가능 localizedDescription error의 코멘트 역할 LoclizedDescription 활용 방법 Error를 준수하는 타입 정의 enum RegisterError: Error { case invalidEmail case invalidPhoneNumber } 디폴트 localizedDescription는 "The Operation couldn't be completed (...)" print(RegisterError..
KeyPath 특정 속성에 대한 path정보를 가지고 있는 key값 (KeyPath 인스턴스를 통해 해당 값에 접근이 가능) // KeyPath 문법: `\`키워드 + 유형 + 프로퍼티 이름 let nameKeyPath: KeyPath = \Person.name let person = Person(age: 12, name: "jake") print(person[keyPath: nameKeyPath]) // jake KeyPath 활용 - RxSwift의 Observable 구독 할때 특정 property를 가져오기 위해 map에서 사용 (간결성 향상) struct Person { var age: Int var name: String } var personObservable: Observable { Obs..
* (편의를 위해 SnapKit 사용) 하단 버튼 safe area 대응 방법 notch가 있는 경우와 없는 디바이스 모두 대응 방법 버튼의 layout left, right, bottom 모두 superview와 동일하도록 설정 self.button.snp.makeConstraints { $0.left.right.bottom.equalToSuperview() // TODO: height } 버튼의 크기를 60으로 맞추어야 하는 경우, 버튼의 상단을 safeArea의 하단으로부터 위로 60만큼 올라오도록 설정 self.button.snp.makeConstraints { $0.left.right.bottom.equalToSuperview() $0.top.equalTo(self.view.safeAreaLa..
final class vs class final class A { ... } class B { ... } class A와 class B의 차이점 A는 서브클래싱이 불가능 A는 성능적으로 더욱 높은 장점 -> 성능이 좋은 이유? 성능이 좋은 이유 - static dispatch 사용 (아래에서 이어서 개념 설명) Static Dispatch (Direct Call) 변수를 타입에 맞춰서 메소드와 프로퍼티를 참조 참조될 요소를 컴파일 타임에 결정 상속 가능성이 없다는 keyword를 코드에 표출하면 컴파일러는 Static Dispatch를 사용 Dynamic Dispatch (Indirect Call) override, subclass와 같은 변수의 실제 타입의 맞춰서 메소드와 프로퍼티를 호출 대표적으로 객..