본문 바로가기

Swift7

[Swift] Class와 Struct의 차이 Swift는 클래스와 구조체를 제공한다. 그렇다면 언제 구조체를 사용해야 하고 언제 클래스를 사용해야 할까? 클래스와 구조체의 가장 큰 차이는 '메모리 저장 방식의 차이'이다. 클래스(Class) - 참조 타입 (Reference Type) - 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가리키는 변수는 스택에 저장하고 메모리 주소값이 힙을 가리킨다. - 복사 시 값을 전달하는 것이 아니고, 저장된 주소를 전달한다. - 힙(Heap)의 공간에 저장, ARC 시스템을 통해 메모리를 관리한다. - 상속이 가능하다. 구조체(Struct) - 값 타입 (Value Type) - 인스턴스 데이터를 모두 스택(Stack)에 저장한다. - 복사 시 값을 전달할 때마다 복사본을 생성한다. (다른 메모리 공간 생.. 2022. 9. 29.
[iOS] Lottie Animation Color 수정(ColorValueProvider) iOS 앱 개발 중 다크모드 적용을 위해 애니메이션의 컬러를 변경해야 했다. Lottie 애니메이션은 런타임에 기본적으로 렌더링되므로 프로그래밍 방식으로 수정하는 것이 가능하다. Value Provider란, 개발자가 런타임에 애니메이션 속성을 쉽게 수정하기 위해 활용할 수 있는 클래스이다. Lottie 애니메이션 내의 모든 요소는 노드로 표시되며, 노드에 액세스하려면 해당 노드의 키 경로(key path)를 알아야 한다. print(AnimationView.logHierarchyKeypaths()) 1. AnimationView.logHierarchyKeypaths()로 경로를 확인한다. 모든 애니메이션의 주요 경로가 나열되어 있으므로 Value Provider를 사용하여 Lottie 애니메이션을 수.. 2021. 11. 30.
[Swift] 옵셔널 바인딩(Optional Binding) Optional 값이 있을 수도 있고 없을 수도 있다. Optional은 값이 대입되어 있거나, 아니면 아무런 값이 대입되지 않은 상태(nil)인 type을 말한다. String? 이라고 표현되면 해당 변수가 String을 갖고 있거나, 아무 값도 없는(nil) 상태라는 것이다. 이는 type casting이나 nil value 체크 등에 있어서 중요한 역할을 한다. Optional Unwrapping 옵셔널 값은 랩에 둘러싸여 있어 사용하기 위해서는 unwrapping 하는 과정이 필요하다. 강제 해제 (Forced Unwrapping) 아래와 같이 간단하게 !를 사용하여 forced unwrapping을 할 수 있다. 값이 있다는 것이 확실할 때 느낌표(!)를 쓰면 값을 제대로 출력할 수 있다. 하지.. 2021. 11. 24.
[iOS] 화면 터치, Return/Enter 시 키보드 내리기(Hide keyboard) 1. 화면 터치 UIViewController의 터치 관련 메소드 중에 touchesBegan 메소드가 있다. ViewController에 아래 코드를 추가하면 화면 터치 시 키보드가 내려간다. class ViewController: UIViewController { ... override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } } 2. Return 키 화면 터치 외에도 TextField에서 입력을 완료한 후 Return 키를 눌렀을 경우 키보드가 내려가는 상황을 가장 많이 경험할 수 있다. TextField에서 키보드의 return 키를 누르면 resignFirstResponder()을 .. 2021. 11. 15.
[iOS] UISheetPresentationController로 Bottom Sheet 띄우기 UISheetPresentationController? 시트의 모양과 동작을 관리하는 프레젠테이션 컨트롤러이다. WWDC 2021에서 새로운 UISheetPresentationController를 사용하여 시트를 띄울 수 있는 방법을 제시했다. 새로운 UISheetPresentationController는 높이를 조정하고, 상단에 grabber를 추가하는 등 더욱 간단하게 구현할 수 있도록 해준다. How to use it 현재 ViewController에서 시트로 띄우고자 하는 다음 ViewController를 정의한다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction.. 2021. 11. 15.
[iOS] Custom font 적용 안 될 때 해결 방법 문제 아래처럼 extension으로 UIFont를 정의하고 View에서 사용하고자 할 때 적용이 되지 않는다. extension UIFont { enum Family: String { case Bold, Light, Medium, Regular, Thin } static func noto(size: CGFloat, family: Family) -> UIFont! { return UIFont(name: "noto_sans_cjk_kr_\(family)", size: size) } } text.font = UIFont.noto(size: 16, family: .Regular) 해결 방안 1. Font 파일 안에 적용하고자 하는 폰트를 넣고 Target Membership 체크를 했는지 확인한다. 2. inf.. 2021. 11. 15.
[iOS] TextField 첫 영문자를 소문자로 시작하기 self.textField.autocapitalizationType = .none TextField에 영문자를 입력하면 제일 첫 글자를 대문자로 자동으로 변환해서 보여준다. 이 부분을 소문자로 나오도록 하는 방법이다. 2021. 11. 15.