전체 글
Swift GCD
GCD: Grand Central Dispatch 멀티코어 시스템에서 concurrent 실행을 제공하는 프로그래밍 언어 요소 DispatchQueue 는 Swift 의 GCD 중 하나이다. Serial, Concurrent Serial 큐에 추가된 순서대로 한번에 하나의 task를 실행한다. DispatchQueue("myLabel") Concurrent 운영체제는 DispatchQueue에서 꺼낸 현재 작업이 끝나지 않더라도, 다음 작업을 다른 스레드에 할당시켜 실행한다. DispatchQueue(label: "", attributes: .concurrent) DispatchQueue (Main, Global, Custom) Main dispatch Queue(DispatchQueue.main) 앱의..
ObservableObject 와 Codable 같이 사용하기
ObservableObject 와 Codable을 같이 채택하면 오류가 발생 한다. Type 'TodoItem' does not conform to protocol 'Decodable' Type 'TodoItem' does not conform to protocol 'Encodable' @Published 프로퍼티 래퍼를 사용하면 Published 로 래핑되는데, 해당 래퍼는 Codable을 채택하고 있지 않다. 따라서 Codable을 채택하도록 extension을 적용한다. //PublishedWrapper라는 클래스를 선언 후, Published형 타입을 받아 @Published에 저장한다. private class PublishedWrapper { @Published private(set) var ..
Swift enum
원시값이 없는 enum enum BodyPart { case head case arm case leg //또는 case head, arm, leg } let bady: BadyPart = .head 원시 값(Raw Value) 이 있는 열거형 Int 를 원시 값으로 갖는 열거형 enum BodyPart: Int { case head, arm, leg } 각각 순서대로 0, 1, 2 가 rawValue에 할당 되어진다. enum BodyPart: Int { case head = 10, arm, leg = 30 } enum BodyPart: String { case head = "head!", arm, leg="leg!" } Int형 열거형의 경우는 값을 지정하지 않은 값은 이전 열거형 + 1 값이 rawV..
Swift 에러 핸들링 (try, catch, throw, throws, do)
Error 선언 enum TestError : Error { case outOfRange case invalidInput(testNum : Int) } 에러를 선언시 Error 프로토콜을 구현하도록 한다. Error를 발생 시킬 메소드 선언 func method(param: Int) throws -> Int { guard param > 0 else { throw TestError.outOfRange } } 에러를 던질 가능성이 있는 메소드에 throws 선언 에러 발생 시 throw로 에러를 던진다. 에러 발생 가능성이 있는 메소드(throws 선언 되어 있는 메소드) 는 실행시 try 구문이 필요하다. try 구문 사용 호출 do { let result = try method(param: -1) } c..
UIKit 커스텀 애니메이션
transitioningDelegate 모든 뷰 컨트롤러가 가질 수 있으며, UIViewControllerTransitioningDelegate 프로토콜을 따른다. func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? 위 메소드를 구현하여 애니메이션 컨트롤러를 리턴하게 한다. UIViewControllerAnimatedTransitioning 애니메이션 컨트롤러 라 칭한다. TransitioningDelegate 가 리턴하는 애니메이션 컨트롤러 객체 transitio..
SpringBoot JpaRepository 를 Dependency Scan 에서 찾지 못할때
현재 제 프로젝트는 멀티모듈 구조로 구성되어 있습니다. root(@SpringBootApplication 어노테이션이 붙은 Application.java 위치) -- shared -- diary -- 기타 등등.. JPA 설정 @ConfigurationPropertiesScan(basePackages = "com.seya330.anything") @SpringBootApplication(scanBasePackages = "com.seya330.anything") public class AnythingApplication { public static void main(String[] args) { SpringApplication.run(AnythingApplication.class, args); } } @..
SwiftUI NavigationView BackButton Custom
NavigationView에서 BackButton을 그냥 주황색 화살표 하나만 남기고 싶었는데.. 그 정보를 찾는게 왜이렇게 어렵지?? import SwiftUI @main struct DiaryApp: App { init() { let image = UIImage(systemName: "arrow.left") UINavigationBar.appearance().backIndicatorImage = image UINavigationBar.appearance().backIndicatorTransitionMaskImage = image //이건 작동 안하는 듯... // UINavigationBar.appearance().barTintColor = .orange //네비게이션 타이틀 텍스트 색상 검정색 적용..
SwiftUI 에서 UIKit 사용하기
UIKit View를 SwiftUI 에서 사용하기 UIViewRepresetable 프로토콜 구현하여 View 구현체 작성 makeUIView, updateUIView 메소드를 구현 해준다. struct SampleUILabel: UIViewRepresentable { @Binding var text: String func makeUIView(context: Context) -> UILabel { let label = UILabel() label.textColor = .black return label } func updateUIView(_ uiView: UILabel, context: Context) { uiView.text = text } } SwiftUI의 프로퍼티 래퍼인 @Binding 등을 사용..
NSCollectionLayoutDimension 알아보기
UICollectionView 에서 UICollectionViewCompositionalLayout 구성시 사용하는 dimension 정보 NSCollectionLayoutDimension.absolute 정확한 크기를 명시한다. 정해진 수대로 크기가 정해진다. NSCollectionLayoutDimension.fractional 아이템을 감싸는 컨테이너의 크기에 대한 비율 값을 사용한다. 0.2 를 준다면 해당 item Continer 의 1/5 크기로 정해진다. NSCollectionLayoutDimension.estimated 런타임에 크기가 변경될 여지가 있는 경우에 사용한다. 시스템의 폰트 크기가 변경되는 경우에 itemSize가 변경되는 것이 고려된 dimension 이다. 시스템이 런타임에 ..
UIKit UIView 의 Frame 과 Bounds
CGRect CGRect 는 x, y 좌표(origin)와 width, height 인 크기(size)를 가진다. UIView 는 CGRect라는 오브젝트를 frame 과 bounds 라는 변수를 통해 가지고 있다. frame frame 의 x, y 좌표는 부모 뷰(super view)의 원점(0, 0) 을 기준으로 좌표가 측정 되어진다. frame 의 width, height 는 해당 뷰 전체를 감쌀 수 있는 사각형의 크기 이다. 200*200의 사각형이 기울어져 있다면, 기울어진 사각형을 포함하기 위해 frame.width, height는 더 크게 측정된다. bounds bounds 의 x, y 좌표는 자신 스스로의 좌표로, 최초 생성시에는 0, 0 으로 초기화 된다. bounds 의 사이즈는 실제 ..