iOS 152

인스턴스 생성 및 소멸 5편 (함수를 사용한 프로퍼티 기본값 설정)

함수를 사용한 프로퍼티 기본값 설정 사용자 정의 연산을 통해 저장 프로퍼티 기본값을 설정하고자 한다면? 클로저나 함수 사용 가능 ※ 사용자 정의 연산? 사용자가 원하는 동작을 하는 연산자를 말함 정위 연산자 // 대표적인 예) 논리 부정 연산자 a = !a 중위 연산자 // 대표적인 예) 기본적인 연산자들 a + b 후위 연산자 // 대표적인 예) 옵셔널 관련 연산자 a? 인스턴스를 초기화할 때 함수나 클로저가 호출되면서 연산 결과값을 프로퍼티 기본값으로 제공 ★ 반드시 클로저 또는 함수의 반환 타입 = 프로퍼티의 타입 ★ 클로저를 통한 프로퍼티 기본값 설정 class SomeClass { let someProperty: SomeType = { // 새로운 인스턴스를 생성하고 사용자 정의 연산을 통해 반..

iOS/Swift 2024.02.01

내비게이션 타이틀에 이미지 표현하기

이미지를 이용하여 UIImage 객체 생성 => 이미지 뷰 객체를 생성 => 내비게이션 아이템의 타이틀 뷰 속성에 이미지 뷰 대입 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.initTitle() } // 네비게이션 이미지 표현 func initTitle() { let image = UIImage(named: "swift_logo") let imageV = UIImageView(image: image) self.navigationItem.titleView = imageV } }

iOS/UIKIT 2024.01.31

내비게이션 타이틀 커스터 마이징하기

일반적으로 네비게이션 바에서 타이틀을 설정하는 구문 self.navigationItem.title = "게시물 목록" 좀 더 커스터마이징 한다면? 먼저 Main.storyboard 파일 안에 내비게이션 컨트롤러를 추가함 내비게이션 타이틀에 표시할 메소드 func initTitle() { // 네비게이션 타이틀용 레이블 객체 let nTitle = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40)) // 속성 설정 nTitle.numberOfLines = 2 // 2줄 표시 nTitle.textAlignment = .center nTitle.font = UIFont.systemFont(ofSize: 15) nTitle.text = "58개 숙소 \n 1..

iOS/UIKIT 2024.01.31

인스턴스 생성 및 소멸 4편 (실패 가능한 이니셜라이저)

실패 가능한 이니셜라이저 이니셜라이저를 정의할 때 전달인자가 잘못된 값이거나 적절하지 못한 값인거나 등의 이유로 인스턴스 초기화에 실패할 수 있음 이에 대응하고자 실패 가능성을 내포한 이니셜라이저 (= 실패 가능한 이니셜라이저) 실패 가능한 이니셜라이저는 클래스, 구조체, 열거형 등에 모두 정의 가능 실패했을 경우에는 "nil"을 반환해주므로 반환 타입이 옵셔널로 지정 (= "init?" 키워드 사용) 실패 가능한 이니셜라이저 class Contact { var name: String init?(name: String) { if name.isEmpty { return nil } self.name = name } } let jerry: Contact? = Contact(name: "") if let jer..

iOS/Swift 2024.01.31

인스턴스 생성 및 소멸 3편 (초기화 위임)

초기화 위임 값 타입인 구조체 및 열거형은 코드의 중복을 피하기 위할 목적으로 이니셜라이저가 다른 이니셜라이저에게 일부 초기화를 위임할 수 있음 enum Student { case ele, mid, high case none init(koreanAge: Int) { switch koreanAge { case 8...13: self = .ele case 14...16: self = .mid case 17...19: self = .high default: self = .none } } init(bornAt: Int, currentYear: Int) { self.init(koreanAge: currentYear - bornAt + 1) } } var jerry: Student = Student(koreanAg..

iOS/Swift 2024.01.31

인스턴스 생성 및 소멸 2편

기본 이니셜라이저와 멤버와이즈 이니셜라이저 기본 이니셜라이저는 저장 프로퍼티의 기본값이 모두 지정되고, 동시에 사용자 정의 이니셜라이저가 정의되지 않을 떄 사용 struct Market { var name: String = "E-Mart" } 저장 프로퍼티를 선언할 때 기본값을 지정하지 않으면 이니셜라이저에서 초기값을 설정해야하는데 구조체에서는 프로퍼티 이름으로 매개변수를 갖는 멤버와이즈 이니셜라이저를 기본으로 제공 (단, 클래스는 멤버와이즈 이니셜라이저 미제공) 구조체 Fruit의 멤버와이즈 이니셜라이저 struct Fruit { var name: String var price: Int } Fruit.init() // error: missing arguments for parameters 'name',..

iOS/Swift 2024.01.30

객체 선언과 동시에 초기화 = "메모리 남아도냐"

만약에 변수를 선언과 동시에 초기화한다면? import UIKit class ViewController: UIViewController { var subject = UILabel() // 선언과 동시에 초기화 override func viewDidLoad() { super.viewDidLoad() self.subject.frame = CGRect(x: 100, y: 100, width: 250, height: 300) self.subject.backgroundColor = .systemRed self.view.addSubview(subject) } } 이렇게 해도 상관은 없지만? 레이블의 인스턴스 생성시기가 문제임 선언과 초기화를 분리하여 viewDidLoad() 메소드 내에 초기화 구문을 작성한다면? ..

iOS/UIKIT 2024.01.29

인스턴스 생성 및 소멸 1편

초기화 (initialization) 클래스와 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비과정 초기화가 완료된 인스턴스는 사용 후에 소멸 시점이 오면 소멸 인스턴스 생성 이니셜라이저(initializer) 정의하면 초기화 과정 구현 가능 (이니셜라이저는 반환값 없음) "init" 키워드를 사용하여 구현 기본적인 형태의 이니셜라이저 class SomeClass { init() { // 초기화할 때 필요한 코드 } } 프로퍼티 기본값 구조체와 클래스의 인스턴스는 옵셔널 저장 프로퍼티를 제외하곤 모든 저장 프로퍼티에 적절한 초기값을 할당해야 함 구조체와 이니셜라이저 struct Market { var name: String init() { name = "E-Mart" // name의 초기값 할당 } }..

iOS/Swift 2024.01.29

CGPoint + CGSize = CGRect

뷰의 위치와 CGPoint iOS에서 뷰는 기준점에 의해 위치가 결정 (기준점: 디바이스 화면 내 사각형 좌측 꼭지점) 기준점을 (0, 0)으로 하여 x, y축 으로 얼마큼 떨어져 있는가를 표현 파란색 사각형의 좌측 상단 꼭지점이 화면 내 좌측 상단 꼭지점으로부터 얼마나 떨어져 있는가를 표현 CGPoint 사용 let location = CGPoint(x: 100, y: 200) 뷰의 크기와 CGSize 크기를 표현하는 방법 CGSize 사용 var size = CGSize(width: 150, height: 200) CGRect 뷰의 위치와 크기를 동시에 가지는 객체의 정보 표현 CGRect 사용 let point = CGPoint(x: 100, y: 100) let size = CGSize(width..

iOS/UIKIT 2024.01.28