iOS/Swift 62

클로저 2편

클로저는 다음 2개를 말함 Named Closure func someFunc { print("Named Closure") } Named Closure는 그냥 함수라고 부름 Unnamed Closure let someClosure = { print("Unnamed Closure") } 이름을 붙이지 않고 사용하는 함수 = 클로저 클로저는 Named Closure & Unnamed Closure 둘 다 의미하지만, 보통은 Unnamed Closure라고 지칭함 ★ 클로저는 함수이기 때문에 1급 객체 함수의 특성 갖고 있음 ★ 클로저 표현식 키워드 "in"을 기준으로 전은 Closure Head 라고 부르고, 후는 Closure Body 라고 부름 { (Parameters) -> Return Type in 실..

iOS/Swift 2024.02.08

클로저 1편

클로저란? 스위프트의 함수 정의 구문에서 목적에 따라 불필요한 부분을 제거 최대한 단순한 형태로 일회용 함수 역할을 하기 위한 객체 아래 코드에서 animations 매개변수로 exec의 함수를 받음 근데 exec라는 함수는 한 번만 사용되는 일회용 함수임 UIView.animate(withDuration: TimeInterval(0.15), animations: exec) 이와 같이 일회용 함수를 매번 만들기 귀찮기 때문에 animations의 타입과 동일한 경우라면 exec 함수 대신 클로저를 넣음 클로저 만들기 func add(value1: Int, value2: Int) -> Int { let result = value1 + value2 return result } 이미 함수라는 것을 알고 있기 ..

iOS/Swift 2024.02.06

접근제어

접근제어 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능 접근제어의 필요성 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문 모듈과 소스파일 모듈은 배포할 코드의 묶음 단위 소스파일은 하나의 스위프트 소스 코드 파일 의미 접근수준 키워드 open public internal fileprivate private 접근수준 키워드를 통해 각 타입 (클래스, 구조체, 열거형 등)에 접근 수준 지정 가능 또는 타입 내부의 프로퍼티, 메서드. 이니셜라이저 등에도 접근 수준 지정 가능 공개 접근수준 => public public 키워드로 접근수준이 지정된 요소는 어디서든 사용 가능 파일의 내부는 물론 외부에서도 지정된 요소에 접근 가능 개방 접근수준..

iOS/Swift 2024.02.05

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

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

iOS/Swift 2024.02.02

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

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

iOS/Swift 2024.02.01

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

인스턴스 생성 및 소멸 1편

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

iOS/Swift 2024.01.29

메서드

함수 1편 (함수 정의 및 호출) :: 밤새는 iOS 탐험기 (tistory.com) 함수 1편 (함수 정의 및 호출) 함수와 메서드 기본적으로 함수와 메서드는 동일, (상황이나 위치에 따라 용어가 다름) 메서드: 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수 함수: 모듈 전체에서 사용하는 explorer89.tistory.com 함수와 메서드 기본적으로 함수와 메서드는 동일, (상황이나 위치에 따라 용어가 다름) 메서드 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수 class someClass { func runSomething() { print(" Method runSomething") } } 함수 모듈 전체에서 사용하는 함수 func runSomething() {..

iOS/Swift 2024.01.26