일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWIFT
- ribs
- map
- HIG
- combine
- Xcode
- UICollectionView
- 리펙토링
- ios
- RxCocoa
- uiscrollview
- 리펙터링
- rxswift
- Clean Code
- 애니메이션
- MVVM
- clean architecture
- collectionview
- Observable
- Human interface guide
- Refactoring
- 리팩토링
- tableView
- swiftUI
- UITextView
- uitableview
- swift documentation
- Protocol
- 클린 코드
- 스위프트
- Today
- Total
목록iOS 응용 (swift) (675)
김종권의 iOS 앱 개발 알아가기
isMultiple(of:) 연산자 나누어 떨어지는지 판단하는 연산자 // bad print(6 % 3 == 0) // true // good print(6.isMultiple(of: 3)) // true compactMapValues 연산자 딕셔너리의 value값을 mapping하는 연산자 let dictionary = ["a": "1", "b": "2", "c": "three"] // bad var convertedDictionary1 = [String: Int]() dictionary .forEach { if let val = dictionary[$0.key], let int = Int(val) { convertedDictionary1[$0.key] = int } } print(convertedDi..
1. map과 flatMap의 차이 - CollectionType에서 쓰임 CollectionType에서 접근: array와 같은 각 개별 요소에 접근하여 변화를 주는 것 만약 Element중에 Optional값이 있다면 flatMap은 unwrap을 해주고, map은 unwrap을 해주지 않음 단, flatMap은 deprecated되어 compactMap 사용 // 'flatMap' is deprecated: Please use compactMap(_:) for the case where closure returns an optional value let c = [1, 2, Optional(3)] .flatMap { $0 } print(c) // [1, 2, 3] 2. map과 flatMap의 차이 ..
1. Privacy manifest 개념, 사용해야하는 이유 (PrivacyInfo.xcprivacy) 2. Privacy manifest 적용 방법 (PrivacyInfo.xcprivacy) 3. Privacy manifest의 privacy report 사용 방법 Privacy Report 란? Xcode에서 앱을 빌드하여 앱스토에 제출 할 때, Xcode15에서는 앱 프로젝트의 모든 개인정보 보호 목록을 집계하고 선언된 데이터 사용을 요약하는 개인정보 리포트 생성이 가능 이 내용은 모두 PrivacyInfo.xcprivacy에 작성된 내용을 바탕으로 .pdf파일로 생성 Privacy Report 사용해보기 Xcode15 > Product > Archive 선택 빌드가 완료되면 목록에서 빌드된 프로..
1. Privacy manifest 개념, 사용해야하는 이유 (PrivacyInfo.xcprivacy) 2. Privacy manifest 적용 방법 (PrivacyInfo.xcprivacy) 3. Privacy manifest의 privacy report 사용 방법 Prvacy Manifest 작성 Xcode > 파일 생성 > privacy 검색 > App Privacy 선택 생성된 형태 손바닥 모양의 아이콘으로 되어 있고, plist처럼 표출 (최초 만들면 App Privacy Configuraton 키값만 있고 value값은 없으므로, 편의를 위해 유명한 라이브러리인 Alamofire에 어떻게 작성되어 있는지 확인) Alamofire깃을 clone하고 프로젝트를 열어 PrivacyInfo 파일을 확..
1. Privacy manifest 개념, 사용해야하는 이유 (PrivacyInfo.xcprivacy) 2. Privacy manifest 적용 방법 (PrivacyInfo.xcprivacy) 3. Privacy manifest의 privacy report 사용 방법 Privacy manifest 란? 앱을 사용하는 사람들로부터 연락처나 개인 정보를 수집할 때 왜 수집하는지 기입하는 것 애플에서는 2024년 봄부터 앱 심사때 privacy manifest 내용을 확인 왜 privacy manifest를 강제화하는지? 일종의 개인 정보 보호 보고서라고 할 수 있음 개발자와 사용자에게 명확하지 않은 방식으로 사용자 개인 정보 보호에 영향을 미칠 가능성이 있을 수도 있음 개인정보 매니페스트 파일을 제공하여 앱..
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..