일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리팩토링
- uitableview
- HIG
- 스위프트
- swiftUI
- Clean Code
- 리펙터링
- Protocol
- rxswift
- RxCocoa
- MVVM
- combine
- tableView
- Human interface guide
- UITextView
- Observable
- SWIFT
- UICollectionView
- ios
- clean architecture
- map
- collectionview
- uiscrollview
- 클린 코드
- Xcode
- swift documentation
- 리펙토링
- Refactoring
- 애니메이션
- ribs
- Today
- Total
목록분류 전체보기 (1641)
김종권의 iOS 앱 개발 알아가기
기존의 UIButton 액션 핸들러 addTarget 메소드의 #selector 부분에 @objc로 정의한 메소드 이름을 넘기는 방식 button.addTarget(self, action: #selector(handleTap), for: .touchUpInside) @objc private func handleTap() { print("tap button!") } addAction 방식의 액션 핸들러 iOS 14+ 부터 addAction 메소드가 UIControl 확장으로 정의 open class UIControl : UIView { /// Adds the UIAction to a given event. UIActions are uniqued based on their identifier, and sub..
Measurement 개념 1, 2, 3과 같은 숫자에 cm, m 같은 문자열도 같이 붙여서 관리해주는 struct 형태의 Unit ex) 1이라는 meter 단위의 숫자가 있을 때, 이것을 cm 단위로 바꾼 후, 뒤에 "cm"를 붙여서 "100 cm"로 만들고 싶은 경우? 보통은 Int, Double Extension으로 계산식을 넣어서 사용하지만 Measurement를 사용하면 이것들을 모두 지원해주기 때문에 단위 변환이나 "cm"와 같은 이름을 붙이기가 유용 MeasurementFormatter 개념 Measurement로 인스턴스를 만든 후 이 값에 특정 "cm"와 같은 이름을 붙여서 하나의 문자열로 만들 수 있는 포멧터 Measurement로 5 숫자를 500cm로 변환하기 meter를 나타내는..
1. Async, Await 간단 사용 정리 (Concurrency) - 사용 방법 2. Async, Await 간단 사용 정리 (Concurrency) - 동시 처리 * 해당 글에서는 간단한 사용법만 살펴보기 때문에, 개념적인 부분은 이전 포스팅 글 참고 동시 처리 Async, Await를 사용하면 비동기 작업을 completion 클로저 블록 없이 한줄로 처리가 가능 let imageUrlString = "https://images.dog.ceo/breeds/australian-shepherd/pepper.jpg" guard let url = URL(string: imageUrlString) else { return } Task { let image = try await loadImage(url: u..
1. Async, Await 간단 사용 정리 (Concurrency) - 사용 방법 2. Async, Await 간단 사용 정리 (Concurrency) - 동시 처리 * 해당 글에서는 간단한 사용법만 살펴보기 때문에, 개념적인 부분은 이전 포스팅 글 참고 Async, Await 기초 사용 방법 ex) Async, Await를 사용하여 url을 가지고 특정 이미지 불러오기 정의부분 함수 리턴 화살표 키워드 "->" 왼쪽에 async 를 붙임 다른 비동기 함수를 호출할 때 await를 붙여서, completion 클로저가 아닌 그냥 일반 코드 작성하듯이 구현 func loadImage(url: URL) async throws -> UIImage { let (data, _) = try await URLSes..
조건문 초기화 기존 방식 프로퍼티를 하나 선언해 놓고 조건문에 따라 값을 대입하는 방법 func normalInit(a: Int) { let string: String if a.isMultiple(of: 2) { string = "even" } else { string = "odd" } print(string) } Swift5.9+ 에서의 조건문 Swift의 발전 방향을 보면, 더욱 간결하게 표현하는게 목적 Swift5.9에서는 클로저와 조건문을 하나의 표현식으로 사용 가능하므로 타입 명시도 필요 없고, result builder 클로저로 인식하므로 return 키워드 생략도 가능 func newInit1(a: Int) { // String 타입 명시 안해도됨 // result builder 클로저이므로..
멀티라인 단축키 Xcode15부터 기본적으로 ctrl + M을 누르면 자동으로 line별로 코드가 포멧팅 결과) (Format to Multiple Lines 항목으로 Xcode15부터 단축키를 제공)
사전지식) dyld와 @rpath dyld: dynamic linker (동적 프레임워크 링커) @rpath: (run search path) 실행 중인 앱이 특정 라이브러리나 프레임워크를 찾을 때 동적 라이브러리 검색 경로를 나타내는 토큰 동적 프레임워크 링커란?) dynamic framework의 주소와 파일들을 Heap과 Stack영역에 위치시키는 역할을 담당하는 매개체 구체적인 dynamic framework 개념은 이전 포스팅 글 참고 "dyld: Library not loaded @rpath" 에러 메시지 동적 프레임워크 링커가 @rapth를 로드하지 못한다는 의미 Xcode 설정 > Embed 옵션이 꺼져있는 상태에서 import한 경우에 발생 해결방법: Embed & Sign으로 변경 rp..
DispatchQueue.main 및 스레드 동작 개념 * 이전 포스팅 글 참고 기본 상식) UI코드와 main thread UI 코드를 초기화하거나 접근할 때 main thread가 아니면 Xcode에서 디버그 모드에서 crash를 내주며 개발자에게 main thread에서 호출하도록 유도 주의할점은 뷰를 초기화 할 때도 main thread에서 수행이 필수 ex) 뷰를 background thread에서 수행하면 Xcode에서 에러 발생 커스텀 뷰에서의 DispatchQueue.main 사용 시 주의사항 보통 커스텀 뷰를 구현할 때, 뷰 내부 코드에 DispatchQueue.main을 넣는 경우가 존재 (외부에서 해당 뷰를 사용할 때 어차피 DispatchQueue.main으로 불러야하니 커스텀 뷰에..