일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- map
- ribs
- 애니메이션
- HIG
- Protocol
- swift documentation
- rxswift
- Human interface guide
- Clean Code
- 리팩토링
- tableView
- 스위프트
- swiftUI
- uiscrollview
- Refactoring
- 리펙토링
- SWIFT
- RxCocoa
- uitableview
- combine
- UICollectionView
- Xcode
- UITextView
- ios
- MVVM
- 클린 코드
- 리펙터링
- collectionview
- clean architecture
- Observable
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
복잡한 조건문 보통 복잡한 조건문은 코드의 깊이가 길어지는 형태 ex) 아래처럼 맨 처음 깊이는 if-else이며, if문 하위에 또다른 if-else가 있고, else하위에 if-else가 있어서 총 깊이가 3개짜리인 조건문 let isUserLoggedIn = true let hasSubscription = false let isContentAvailable = true if isUserLoggedIn { if hasSubscription { print("사용자가 로그인하고 구독이 활성화되어 있습니다.") } else { if isContentAvailable { print("사용자가 로그인했지만 구독이 없습니다. 콘텐츠를 사용할 수 있습니다.") } else { print("사용자가 로그인했지만 구..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bo8Qns/btsy0hAXabN/dAhHrsvgIiKOkJU065oLQ0/img.png)
Protocol 프로퍼티 치환 일반적으로 protocol에서 프로퍼티를 선언하면, 이 프로토콜을 준수하는 쪽에서 똑같은 프로퍼티 이름으로만 접근이 가능 protocol SomeProtocol { var myProperty: Int { get } } struct SomeStruct: SomeProtocol { var myProperty: Int } 만약 프로퍼티 이름이 다르면 컴파일 에러 발생) @_implements를 사용하면 다른 이름으로 사용이 가능 @_implements 키워드 @_implements(ProtocolName, propertyName)으로 프로퍼티 위에 선언하여 사용 struct SomeStruct2: SomeProtocol { @_implements(SomeProtocol, myPr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bytBfs/btsyYpEvdD6/YMS5nEOY4gW5uQgbmDv9f1/img.png)
Zero Width Space "\u{200B}" 문자는 "zero width space"라고 불리며, 문자열은 있지만 너비의 크기가 0인 문자 ex) 두 개의 UITextField에 placeholder 텍스트를 지정하고, text 값에는 각각 ""와 "\u{200B}"를 입력한 상태 private let textField1 = { let textField = UITextField() textField.font = .systemFont(ofSize: 24, weight: .regular) textField.text = "" textField.textColor = .black textField.placeholder = "placeholder (empty spacing)" return textField..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c4YSaD/btsyTYgAOmY/QVp2jXl5vWu3siylHQ43ak/img.png)
1. lineSpacing, lineHeight 개념 (#baselineOffset) 2. 특정 문자열 사이 간격 조절 방법 (#lineSpacing 고급) 문자열 사이 간격 조절 아이디어 "ABC\n123\ndef"라는 문자열이 있을 때 ABC와 123 사이 간격을 10으로 하고, 123과 def의 간격을 30으로 하고 싶은 경우? lineSpacing은 저번 포스팅 글에서 알아본 대로 라인의 첫번째 문자열 기준으로 lineSpacing이 결정되는 개념을 이용 "ABC"의 lineSpacing을 10으로 설정, "123"의 lineSpacing을 30으로 설정 예제 ex) "ABC\ndef"에서 "ABC"와 "def"사이 간격을 30으로 만들기 적용 전) 적용 후) let text = "ABC\n123..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FRiNF/btsyU9WecDx/FrkSGlj5xSRDoPzsNz42Q0/img.png)
1. lineSpacing, lineHeight 개념 (#baselineOffset) 2. 특정 문자열 사이 간격 조절 방법 (#lineSpacing 고급) lineSpacing과 lineHeight 개념 lineSpacing: 문자열이 2줄 이상이 될 때, 이 두 줄 간격을 의미 (default는 0) lineHeight: baselineOffset으로 구현하고 문자열 1줄에 대해서 바로 적용되며, 문자열을 가지고 있는 뷰 (UILabel, UITextView, UITextField)등의 높이 cf) lineHeightMultiple 개념 lineHeightMultiple는 폰트 크기에 비례하여 height값을 늘려주는 값 ex) lineHeightMultiple이 1.2이면 font 크기의 1.2배 ..
함수로 정의 vs closure로 정의 보통 코드를 작성하다가 중복 작업이 있을 때나 로직이 여러개가 들어갈 때, 하나의 일은 하나의 함수에서 하기 위해서 별도의 함수를 정의하여 그 함수를 호출하도록 구현 하지만 이렇게 함수를 만들때, 다른곳에서는 사용하지 않고 현재 위치에서만 사용하는 경우가 존재 // 리펙토링 전 func workA() { // A work // B work
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/0nLy8/btsyJxpcQg4/LBoce2kPt3tZ699ihRuQqk/img.png)
deprecated될 UIScreen.main.bounds.width 스크린 width를 구할 때 예전에는 보통 UIScreen.main.bounds를 사용 이때 UIScreen.main을 사용하려는 시점에 애플에서 경고 메시지가 노출 'main' will be deprecated in a future version of iOS: Use a UIScreen instance found through context instead: i.e, view.window.windowScene.screen 여기서 사용하라고 애플에서 권장하는 것은 view.window.windowScene.screen 라는 프로퍼티 애플에서 권장하는 view.window.windowScene.screen 이 프로퍼티는 아래처럼 접근이 가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/w1flg/btsyFofWPho/qAx0zjRL0S30gXL5zMldc1/img.png)
statusBarManager 개념 기존에 statusBar의 heigth를 구하려고 하면, statusBarFrame 이라는 기존에 있던 프로퍼티가 iOS13에서 deprecated되었다는 경고 메시지가 노출 UIApplication.shared.statusBarFrame.height 애플은 iOS13+에서 statusBar에 대한 값을 관리하는 별도의 statusBarManager를 정의 UIStatusBarManager는 class 타입 3가지의 프로퍼티가 존재 여기서 statusBarFrame을 사용하면 height구하기도 가능 statusBarManager 사용법 UIWindowScene의 instance이므로, UIWindowScnene인스턴스를 가져와서 획득 if let windowScene..