swift 55

Swift - Any vs AnyObject

Any Any를 직역하면 '아무거나'라는 의미이다. 이름에서 알 수 있듯이 모든 타입의 인스턴스들을 허용한다는 뜻이다. AnyObject AnyObject의 정의를 살펴보면 프로토콜이다! 모든 클래스가 암시적으로 준수하는 프로토콜 즉 클래스 타입만 가능하다!라는 의미!! 이해하기 쉽게 Object는 클래스를 통해 생성된다. (작명의 중요성) 따라서 AnyObject는 모든 클래스 타입의 인스턴스들을 나타낼 수 있다. 너무 허무하네..; # 참고한 사이트 https://zeddios.tistory.com/213

iOS/Swift 상식 2023.01.23

Swift - Convenience init

Init의 종류에는 2가지가 존재한다. Designated init convenience init Init은 멤버들을 초기화하고 상속받은 멤버들을 커스텀하기 위해 사용한다. (Designated) Init (Designated) Init은 우리가 클래스를 생성할 때 자주 사용했던 Init이다. 해당 Init은 클래스의 프로퍼티가 모두 초기화되게 만들어준다. class Pet{ var dog: String var cat: String init(dog: String, cat: String){ self.dog = dog self.cat = cat } } Convenience init Convenience init은 Designated init을 보조하여 도와주는 역할이다. 말 그대로 보조이므로 Designat..

iOS/Swift 상식 2023.01.23

Swift - Copy On Write(COW) 동작 방식

Copy on Write를 알아보기 전에 학교에서 C언어를 배울 때 지겹도록(?) 들었던 Call-by-Value Call-by-Reference 위 두 가지를 복습 차원으로 알아보자 Call-by-Value 영어 뜻을 직역으로 해석하자면 값의 호출인데 느낌 상 알 수 있듯이 값을 호출할 때 데이터를 복사하여 호출한다는 것이다. 예를 들어 int a = 1; int b = a; b = 3; printf("%d",a);// 1 printf("%d",b);// 3 다음과 같이 호출한다면 변수 a에 1을 메모리에 저장하고 그 값을 b에 저장하는 경우 같은 공간을 가리키는 것이 아닌 메모리에 새로운 공간을 할당하여 값을 복사하게 된다. 따라서 b의 값을 3으로 변경하게 되면 b의 값은 3으로 변경되지만 a의 값..

iOS/Swift 상식 2023.01.23

UIKit에서 SwiftUI Preview 사용하기

UI를 코드로 작성할 때 매번 시뮬레이터를 실행하기 매번 번거롭다. 그럴 경우 Preview를 사용하여 내가 작성한 코드를 쉽게 볼 수 있다. □ 코드 1 import SwiftUI #if DEBUG extension UIViewController { private struct Preview: UIViewControllerRepresentable { let viewController: UIViewController func makeUIViewController(context: Context) -> UIViewController { return viewController } func updateUIViewController(_ uiViewController: UIViewController, context:..

iOS 2023.01.19

MVVM 패턴 적용

아이디, 비밀번호를 입력했는지 감지하는 기능 사용한 라이브러리: UIKit, SnapKit, RxSwift, RxCocoa (storyboard 사용 X) 설명: 아이디 비밀번호를 입력한 경우 버튼 문구가 '로그인'으로 변경된다. 둘 중 하나라도 입력하지 않은 경우 '정보 부족'을 출력한다. □ View import UIKit import SnapKit import RxSwift class ViewController: UIViewController { /* UI 생성 코드 */ //ID Label lazy var IdLabel: UILabel = { let l1 = UILabel() l1.font = .systemFont(ofSize: 20) l1.text = "아이디" return l1 }() // P..

iOS/MVVM 2023.01.18

Swift - Class 성능 향상 시키는 방법

final을 붙이면 성능이 향상된다. 왜??? 이유를 알기 위해서는 Dispatch라는 것을 알아야 한다. Dispatch 내가 호출할 함수를 컴파일 타임에 결정하냐, 런타임에 결정하냐에 따른 방식이다. StaticDispatch (Direct Call) 컴파일 타임에 호출되니 함수를 결정하고 런타임에 그대로 실행된다. 컴파일 시간에 결정되기 때문에 성능상 이점이 있다. Dynamic Dispatch (Indirect Call) 런타임에 호출될 함수를 결정한다. swift는 클래스마다 함수 포인터들의 배열인 vTable이라는 것을 유지한다. 하위 클래스가 메서드를 호출할 때, vTable을 참조하여 실제 호출할 함수를 결정한다. 위와 같은 과정이 런타임에 발생하기 때문에 성능상 손해를 보게 된다 Refe..

iOS/Swift 상식 2023.01.07

iOS - Storyboard vs Code

StoryBoard 장점 - 결과물 예층 쉬움, 속성 쉽게 확인 가능 - 쉽게 UI 생성 가능 - pop, push, present, dismiss등의 코드를 사용하지 않아도 됨 단점 - 화면 로딩 시 무거움 - 링크가 끊어진 경우 파악하기 힘듬 - 협업 문제 발생 가능 ( 오류가 발생한 경우 파악하기 힘듬) - 데이터 흐름이 표시되지 않음 - 앱이 커지면 가독성이 떨어짐 Code 장점 - 가볍다 - 협업 하기 편리하다 - 모든 UI요소에 제어감각이 생긴다. - 재사용하기 용이 - Launch Screen을 제외한 모든 코드가 코드로 구현 가능하다. - 스토리보드는 및 nib는 loading 및 parsing 오버헤드에 영향을 받는다. 단점 - 해당 컴포넌트를 숙지해야 함 - 어떤 화면이 만들어질지 파악..

iOS/Swift 상식 2023.01.07

Autolayout 제약걸기 (코드 - 1)

□ 버튼 생성 및 제약 걸기 let btn1: UIButton = .init(frame: .init()) btn1.backgroundColor = .yellow btn1.setTitle("안녕하세요", for: .normal) btn1.setTitleColor(UIColor.black, for: .normal) self.view.addSubview(btn1) btn1.translatesAutoresizingMaskIntoConstraints = false // false - AutoLayout을 따르겟다 // true - frame을 따르겠다. btn1.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 100).isActive = true btn1..

iOS/AutoLayout 2023.01.07

Intrinsic Content Size, Priority

Intrinsic Content Size 컨텐트의 본질적인 크기를 의미한다. 다음 표를 보면 쉽게 이해할 수 있다. Label, Button, Switch, TextField는 본질적인 크기를 가지고 있어서 오토레이아웃을 지정하는 경우 에러가 나지 않는다. Priority Hugging Priority 두 오브젝트 중 한 오브젝트가 커져야 하는 상황일 때 우선순위가 낮은 오브젝트는 Instrinsic size를 유지하지 않고 커진다. Compression Resistance Priority Hugging Priority와 반대되는 상황이다. 한 오브젝트가 크기 및 내용이 너무 길어서 다른 오브젝트 영역을 넘어갈 때 둘의 우선순위가 같아서 어떤 오브젝트를 줄여야 할지 모를 때 사용한다. 해당 우선순위가 높..

iOS/AutoLayout 2023.01.07