no image
[iOS] DI(Dependency Injection) 의존성 역전
의존성 역전이 왜 필요한지 알아봅시다. 먼저 의존성 주입이 무엇인지를 간단히 알아본다면의존성 : 서로 다른 객체 사이에 의존관계가 존재주입 : 외부에서 객체 또는 데이터를 생성해서 넣는 것 import UIKitclass Person { var name: String init(name: String) { self.name = name }}// Person에 name "바지" 주입let 사람 = Person(name: "바지")  Person(name: "바지") 이부분이 바로 의존성을 주입해주는 것입니다. 외부에서 name에 값을 주고 있으니까요.  그럼 이제 의존성주입이 무엇인지 간단히 알아봤으니 왜 의존성 역전이 필요한지 알아보겠습니다.  아래와 같은 코드가 있다고..
2023.05.27
no image
[iOS] Delegate 패턴 이해하기 및 Protocol 프로그래밍을 지향하는 이유
오늘 알아볼 것은 Delegate 패턴입니다. 알고보면 굉장히 쉽고 우리가 일상생활에서 많이 발견할 수 있는 패턴입니다.Delegate의 사전적 정의는 위임자라고 나옵니다. 어려운 애기는 넘어가고 쉽게 쉽게 가봅시당  일상생활을 예시로 먼저 설명드려볼게요. 저는 교촌치킨 매장에가서 레드콤보를 먹으려고 합니다.여기서 제가 레드콤보를 먹기위해 해야하는 일은 무엇일까요 ? 저는 그냥 매장에가서 직원분께 메뉴를 말하고 그에 맞는 금액을 결제하면 끝입니다. 그러면 레드콤보를 직원분이 가져다 주시죠.이것이 바로 델리게이트 패턴입니다. 엥 이게 왜 델리게이트 패턴이야? 라고 하시는분들을 위해 조금 더 설명해드리자면 우리는 레드콤보를 주문하여 레드콤보가 나온것이지만 사실 우리가 주문을하고 레드콤보가 나오기까지 아주 많..
2023.04.10
no image
[iOS] TextView placeholder 구현하기
UITextView에는UITextField에는 있는 placeholder가 없다. delegate를 채택하여 placeholder가 있는것처럼 구현해보자 ! 먼저 textView를 구현해주자 // // ViewController.swift // textView // // Created by 이준복 on 2023/03/21. // import UIKit final class ViewController: UIViewController { let textViewPlaceHolder = "내용을 입력하세요" lazy var textView: UITextView = { let textView = UITextView() textView.text = self.textViewPlaceHolder textView.tex..
2023.03.21
no image
[iOS] CustomCell을 등록하고 재사용할때 실수를 줄이기 위한 방법
왜 CustomCell을 사용할때 오류가 발생할까? 일반적으로 TableViewCell이나 CollectionViewCell을 만들고 사용할때를 보자 셀 등록 tableView.register(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "MyTableViewCell") collectionView.register(UINib(nibName: "MyCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MyCollectionViewCell") 재사용 guard let cell = tableView.dequeueReusableCell(withIdentifier: "My..
2023.03.14
no image
[iOS] SwiftUI에서 Info.plist 설정하기
SwiftUI 프로젝트를 생성하면 UIKit 프로젝트와 다르게 Info.plist 파일이 보이지 않는다 왜 보이지 않는가하니 애플 공식문서를 보면 Xcode13버전부터 Info.plist 파일이 생성되나 정보탭이아닌 프로젝트 탭에서 필드를 추가할 수 있다고합니다. 앞으로 SwiftUI 프로젝트는 프로젝트 파일의 Targets에서 Info탭에서 필드를 추가하면 됩니다.
2023.03.02
no image
[iOS] info.plist에서LightMode, DarkMode 강제하기
info.plist에서 프로퍼티를 추가하면 앱을 실행할때 LightMode 또는 DarkMode로 강제할 수 있다. info.plist에서 설정을 하면 디바이스가 다크모드여부에 상관없이 info.plist에서 설정한 값으로 앱을 실행한다. 설정방법 info.plist에서 Information Property List에서 행을 추가해준다 행을 추가한뒤 Key값에 Appearance라고 쳐준다 이제 Value값에 Light 또는 Dark라고 입력하면 끝이다.
2023.03.02
no image
[iOS] Xcode13 이상 SwiftUI 프로젝트 설정하기
AppDelegate 생성하기 AppDelegate.swift파일을 추가 아래 코드를 AppDelegate 파일에 추가 import Foundation import UIKit class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { return true } } 코드를 추가한 뒤 Project명 + App.swift 파일로 이동하여 다음 코드를 추가 import SwiftUI @main struct Swif..
2023.03.02
no image
[iOS] CornerRadius를 활용하여 동그랗게 만들기
Label, Button, View 등과 같이 UIKit의 Object 모서리를 둥그렇게 만들어보자 오브젝트의 layer의 cornerRadius에 값을 주면 object의 틀을 얼마나 깍을지 정하고 오브젝트에 clipsToBounds 값을 True로 변경해주면 object의 틀을 벗어나는 부분을 잘라주어 모서리가 둥그렇게 변하는 것이다 import UIKit import SwiftUI class ViewController: UIViewController { lazy var label: UILabel = { let label = UILabel() label.backgroundColor = .tintColor label.text = "Test" label.textAlignment = .center labe..
2023.02.27
no image
[iOS] 시뮬레이터를 실행하지 않고 SwiftUI를 활용하여 UIKit 앱 미리보기
UIKit로 앱을 만들다 결과를 확인하려면 항상 시뮬레이터를 통해 어플을 실행해야 결과물을 확인 할 수 있는데 SwiftUI를 활용하여 앱을 실행하지 않고도 결과물을 미리 확인할 수 있다. 간단한 Label을 추가한 ViewController이지만 결과물 확인을 위해선 시뮬레이터를 실행하여 확인하여야 한다. import UIKit class ViewController: UIViewController { lazy var firstLabel: UILabel = { let label = UILabel() label.text = "First Label" label.textColor = .black label.backgroundColor = .lightGray label.font = .systemFont(ofSi..
2023.02.25