전체 글 94

인스턴스 생성 및 소멸 6편 (인스턴스 소멸)

인스턴스 소멸 클래스의 인스턴스가 메모리에서 해제(소멸) 되기 직전에 호출 되는 메소드가 디이니셜라이저 "deinit" 키워드 사용 ★ 디이니셜라이저는 클래스의 인스턴스에서만 구현 ★ 스위프트에서는 인스턴스가 필요하지 않는다면 자동으로 소멸시킴 이 때 디이니셜라이저를 통해 별도로 전달할 내용이나, 저장해야 하거나 할 경우, 부가 작업을 지정해줄 수 있음 클래스에는 디이니셜라이저를 1개만 구현 가능 매개변수를 갖지 않고 소괄호도 적어주지 않음 디이니셜라이저 구현 class SomeClass { deinit { print("deinit") } } var someInstance: SomeClass? = SomeClass() someInstance = nil // deinit

iOS/Swift 2024.02.02

알림창 안에 맵 넣기

먼저 UIViewController 타입의 "MapAlertViewController" 파일 생성 및 메인 스토리보드의 class로 설정 "MapAlertViewController" 파일 내에 버튼 추가 import UIKit class MapAlertViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 버튼 생성 let alertBtn = UIButton(type: .system) // 버튼 속성 설정 alertBtn.frame = CGRect(x: 0, y: 150, width: 100, height: 30) alertBtn.center.x = self.view.frame.width / 2 aler..

iOS/UIKIT 2024.02.01

인스턴스 생성 및 소멸 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