Delegate 패턴을 사용하면서 Protocol 을 만들었다. 그런데 SwiftLint 에서 다음과 같이 경고가 발생했다! delegate 는 reference cycle 을 피하기 위해서 weak(약한 참조)를 사용해야 한다. delegate protocol 은 weak(약한 참조)를 위해서 클래스 전용 이어야 한다. Delegate 를 weak 로 선언하자 인스턴스화 해서 참조할 때 Retain 이 생긴다고 해요. 그런데 protocol 은 클래스나 구조체처럼 인스턴스화 되는 것이 아닌데 왜 Retain cycle 이 생기는걸까요? 예를 들어 클래스 a와 b가 서로를 protocol 로 참조하게 되면 강한 참조가 되면서 Retain Cycle 이 발생하는거죠! 그래서 weak 를 선언해서 refer..
다음은 제가 코드리뷰를 작성하던 도중 기록하고 싶은 내용이라서 그대로 가져왔습니다. 출발 extension UIViewController { func makeAlert(title : String, message : String, okAction : ((UIAlertAction) -> Void)? = nil, completion : (() -> ())? = nil) { let alertViewController = UIAlertController(title: title, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "확인", style: .default, handler: okAction) alertViewCont..
Xib 로 커스텀뷰를 만들어 봤는데 액션도 연결해봅시다! 다음의 글을 읽고 보시는걸 추천해요! iOS) 커스텀 뷰 Xib 연결하기 다양한 방법이 있고 각각 장단점이 있다고 생각해요! 1. delegate pattern 2. NSNotification 3. 뷰 컨트롤러에서 커스텀 뷰 요소 호출 📌 CustomNavigationBar.swift 커스텀뷰는 다음과 같이 작성했어요!(Xib 연결을 View 의 Custom Class 설정으로 해준 상태에요!) import Foundation import UIKit class CustomNavigationBar: UIView { // MARK: - UBIoutlet Properties @IBOutlet weak var profileButton: UIButton! ..
Dynamic Type 이란! 쉽게 말해서 우리가 기기에서 아래와 같이 텍스트 크기 를 설정할 수 있는데요. 이 때 사용자가 지정한 텍스트 크기에 따라 동적으로 크기가 변하는 것을 말해요! 설정 > 디스플레이 및 밝기 > 텍스트 크기 Dynamic Type 을 적용하지 않으면 기기에서 텍스트 크기를 변경했는데 적용이 되지 않는 것이지요! 또한, 더 큰 사이즈도 설정이 가능한데요 설정 > 손쉬운 사용 > 디스플레이 및 텍스트 크기 > 더 큰 텍스트 추가로 5개의 더 큰 사이즈도 선택할 수 있는 것을 볼 수 있어요! 🔍 HIG 살펴보기 HIG 문서에서 말하는 Dynamic Type 은 이러합니다. Dynamic Type 은 글자를 읽는이가 선호하는 텍스트 사이즈를 선택할 수 있도록 추가적인 flexibili..
iOS 15 에서 UIButton 에 새로생긴 UIButton.Configuration 에 대해서 알아보자! 먼저, 개발자문서를 따라가면서 버튼을 만드는 방법에 대해서 알아보자. Creating Buttons ✨ init(frame: CGRect) Creates a new button with the specified frame. ✨init(frame: CGRect, primaryAction: UIAction?) Creates a new button with the specified frame, registers the primary action event, and sets the title and image to the action’s title and image. iOS14 부터 사용가능한 생성자이다..
두가지 방법을 통해서 커스텀 뷰 클래스를 Xib 와 연결해서 만들어보자! 그리고 좀 더 고민해볼 점까지 같이 알아봐요! 🧙♀️ 방법1 : File's Owner 에서 Custom Class 설정 File's Owner : File's Owner 객체를 사용해서 nib 파일의 top-level 객체들을 참조할 수 있도록 한다. 우리가 IBAction, IBOutlet 에 해당하는 것을 연결할 수 있게 해주는 것은 이 참조가 가능하기 때문이다. 해당 뷰를 가져오기 위해서 UIView 클래스에서 nib 형태로 가져와야 합니다. 이때! 두가지 방법으로 가져올 수 있어요! // CustomNavigationBar.siwft // 역할 : 커스텀 네비게이션 바 class CustomNavig..
동적으로 셀의 너비와 높이를 설정하는 방법에 대해서 알아보자구요! 셀의 사이즈를 정하는 것이니 collectionView(_:layout:sizeForItemAt:) 메서드 안에서 이루어지는 것이라고 생각할 수 있을거에요! 자 그럼 어떻게 코드를 짜야하냐..! 이제부터 소개하는 내용에 정답은 없어요! 상황과 여건에 따라서 사용하시면되고 더 좋은 코드가 있다면 알려주세요! 방법1 : collection view cell 객체 생성해서 데이터를 넣고 frame 의 size 를 가져오기. 방법2 : UILabel 사용하기 방법3 : NSString 사용하기 방법4 : systemLayoutSizeFitting 사용하기 방법5 : boundingRect(with:options:attributes:context:..
navigation view controller 에서 pop 하는 방법은 총 세가지다. popToRootViewController(animated:) : rootViewController 를 제외한 모든 view controller 를 pop 한다. popToViewController(_:animated:) : 특정 viewController 가 navigation stack 의 맨 위에 올때까지 pop 한다. popViewController(animated:) : navigation stack 에서 view controller 를 pop 한다. 마지막 popViewController(animated:) 메서드는 우리가 자주 사용해봤으니 앞에 2개 메서드에 대해서 알아보자. 다음의 코드는 네비게이션컨트롤..
- configurable widget
- WidgetKit
- watchOS
- Protocol
- WWDC
- WWDC22
- Swift
- containerBackground
- MOYA
- 서버통신
- Algorithm
- SwiftUI
- async/await
- Objective-C
- YPImagePicker
- Widget
- MVVM
- IOS
- APNS
- OpenSourceLibrary
- projectsetting
- rxswift
- CloneCoding
- urlsession
- UserDefaults
- Firebase
- github
- 2022 KAKAO TECH INTERNSHIP
- RxCocoa
- Notification
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday