본문 바로가기

Swift63

[Swift] Properties(프로퍼티) - 2 Property Observers프로퍼티 옵저버(Property Observer)는 프로퍼티 값의 변화를 관측하고 반응한다. 프로퍼티 옵저버는 새로 설정된 값이 이전의 값과 같더라도, 프로퍼티의 값이 설정 될 때 마다 반응한다. 프로퍼티 옵저버는 다음의 위치들에 추가할 수 있다.직접 정의한 저장 프로퍼티상속받은 저장 프로퍼티상속받은 컴퓨티드 프로퍼티서브클래스에서 상속받은 프로퍼티를 오버라이드 하여 프로퍼티 옵저버를 추가할 수 있다. 직접 정의한 컴퓨티드 프로퍼티의 경우에는 setter를 사용하면 프로퍼티 옵저버를 사용하지 않고도 값의 변화를 관측하고 응답할 수 있다. 프로퍼티 옵저버는 두 종류가 있으며, 둘을 같이 쓸 수도 있고 하나만 쓸 수도 있다.willSet은 새로운 값이 저장되기 직전에 호출된다... 2023. 6. 2.
[Swift] Properties(프로퍼티) - 1 Properties프로퍼티는 특정 클래스, 스트럭처, 열거형에 값을 연관시킨다. 저장 프로퍼티는 변수나 상수의 값을 인스턴스의 일부로 저장하고, 컴퓨티드 프로퍼티는 값을 저장하기보다는 계산한다. 컴퓨티드 프로퍼티와 다르게, 저장 프로퍼티는 열거형에서 쓸 수 없다. 저장 프로퍼티와 컴퓨티드 프로퍼티는 인스턴스와 연결되는 반면, 다르게 타입 프로퍼티는 타입 그 자체에 연결된다. 추가로 프로퍼티 값의 변화를 모니터링 하고, 커스텀 액션으로 반응할 수 있는 프로퍼티 옵저버를 사용할 수도 있다. 프로퍼티 옵저버는 저장 프로퍼티에서 직접 정의하여 추가할 수 있으며, 서브클래스한태 상속된다. Stored Properties가장 간단한 형태의 저장 프로퍼티는 클래스나 스트럭처 인스턴스의 일부로 저장되어있는 변수 혹은 .. 2023. 6. 2.
[Swift] Structures and Classes(스트럭처와 클래스) - 2 Structures and Enumerations Are Value Types값 타입은 변수나 상수에 할당되거나 함수에 전달될 때, 값이 복사되는 타입이다. 스위프트의 정수, 실수, 부울, 문자열, 배열, 딕셔너리와 같은 기본 타입들은 모두 값 타입이고 실제로 스트럭처로 구현되어있다. 스위프트에서 모든 스트럭처와 열거형과 그 값 타입 프로퍼티들은 코드 안에서 복사되어 전달된다.Note배열, 딕셔너리, 문자열과 같은 콜렉션은 전달(혹은 할당)될 때, 즉시 복사되지 않고 수정 작업이 이루어졌을때 복사를 하는 최적화가 되어있다.let hd = Resolution(width: 1920, height: 1080)var cinema = hd이 예시는 앞선 예시에 나온 스트럭처 Resolution의 상수 인스턴스 h.. 2023. 6. 1.
[Swift] Structures and Classes(스트럭처와 클래스) - 1 Structures and Classes스트럭처와 클래스는 범용성 있는 유연한 구조이다. 상수, 변수, 함수를 작성하는 것 처럼 프로퍼티와 메소드를 작성하여 스트럭처와 클래스에 기능을 부여할 수 있다. Comparing Structures and Classes스트럭처와 클래스는 많은 공통점을 가지고 있다. 둘 다 다음과 행동을 할 수 있다.값을 저장하기 위한 프로퍼티 정의기능(functionality)을 위한 메소드 정의서브스크립트 구문을 통하여 값에 접근할 수 있게 하는 서브스크립트 정의초기 값을 설정하기 위한 이니셜라이저 정의기본 구현보다 확장된 기능을 위한 확장성특정 종류에 대한 표준 기능을 제공하는 프로토콜 준수클래스는 스트럭처가 없는 추가 기능들이 있다.상속을 통한 다른 클래스의 특성 상속타입 .. 2023. 6. 1.
[Swift] Enumerations(열거형) - 2 Raw ValuesAssociated Values 섹션에서는 열거형의 케이스가 다른 타입의 연관값을 저장하는 방법을 보여줬다. 연관 값 대신, 열거형 케이스들은 같은 타입의 디폴트 값-원시 값(raw values)-을 미리 가지고 있을 수도 있다. 다음은 ASCII값을 원시값으로 사용하는 예시이다.enum ASCIIControlCharacter: Character { case tab = "\t" case lineFeed = "\n" case carriageReturn = "\r"}열거형 ASCIIControlCharacter의 원시 값은 Character 타입으로 정의되어 있고, ASCII 제어 문자로 설정되어 있다. 원시 값은 어떠한 자료형이든 될 수 있으며, 각 원시 값은 열거형을 선.. 2023. 5. 31.
[Swift] Enumerations(열거형) - 1 Enumerations열거형은 연관된 값들을 공통된 타입으로 묶은 그룹이며, 타입 안전(type-safe)하게 사용하게 해준다. 스위프트의 열거형은 유연하다. 각 케이스에 값을 할당하지 않아도 되며, 스트링, 캐릭터, 정수, 실수등을 각 열거형 케이스에 제공할 수 있다. 스위프트에서 열거형은 그 자체로 일급 객체다. 컴퓨티드 프로퍼티(computed properties)나 인스턴스 메소드(instance method)와 같은, 기존에는 클래스에서만 사용할 수 있었던 많은 기능들을 가져왔고, 초기 케이스 값을 설정하는 이니셜라이저도 정의할 수 있으며, 프로토콜을 상속 받을 수도 있다. Enumeration Syntax열거형을 작성할 때는 enum 키워드를 사용하여 한 쌍의 중괄호 안에 작성한다.enum S.. 2023. 5. 30.
[Swift] Closures(클로저) - 3 Escaping Closures클로저가 함수의 아규먼트로 전달이 됐는데, 함수가 리턴된 이후에 클로저가 호출되면 이를 함수를 탈출(escape)했다고 한다. 클로저를 파라미터로 받는 함수를 작성할 때, 파라미터의 타입 뒤에 @escaping을 작성해서 그 클로저가 탈출 가능하다는 것을 나타낼 수 있다. 클로저가 함수를 탈출하는 한가지 방법은 외부 변수에 저장되는 것이다. 예를 들어 많은 비동기 작업을 시작 하는 함수들은 클로저 아규먼트를 컴플리션 핸들러(completion handler)로 사용한다. 함수는 비동기 작업을 시작하고 리턴되지만, 클로저는 비동기 작업이 끝날때까지 호출되지 않는다. 따라서 나중에 호출되기 위해 탈출이 필요하다. 예를 들면:var completionHandlers: [() ->.. 2023. 5. 29.
[Swift] Closures(클로저) - 2 Capturing Values클로저는 자신이 정의된 컨텍스트에서 상수나 변수를 캡처할 수 있다. 캡처한 상수나 변수가 정의되어있는 범위가 더 이상 존재하지 않아도 클로저의 본문에서 그 변수나 상수를 참조하고 수정할 수 있다. 스위프트에서 값을 캡쳐하는 가장 간단한 형태의 클로저는 중첩 함수이다. 중첩 함수는 외부 함수(둘러싸고 있는 함수)내부에 선언된 변수나 상수, 그리고 아규먼트를 캡처할 수 있다. 다음 예시는 incrementer라는 중첩 함수를 가지고 있는 makeIncrementer 함수의 예시이다. incrementer() 함수는 runningTotal과 amount 두개의 변수를 캡처한다. 이 값을 캡처한 다음에 incrementer는 호출될 때마다 amount만큼 runningTotal을 증.. 2023. 5. 29.
[Swift] Closures(클로저) - 1 Closures클로저는 코드 내부에서 전달되고 사용할 수 있는 독립적인 코드 블록이다. 클로저는 C, Objective-C의 블록이나 다른 언어들의 lambda와 유사하다. 클로저는 자신이 정의된 컨텍스트에 있는 상수나 변수의 참조를 캡처하고 저장할 수 있다. 이를 캡쳐한 상수나 변수에 대한 클로징 오버(closing over)라고 한다. 이 경우에 스위프트가 모든 메모리 관리를 해준다. 함수(Function)는 클로저의 특수한 케이스이며, 클로저는 다음과 같은 세가지 형태가 있다.어떠한 값도 캡처하지 않고, 이름이 있는 전역 함수자신을 둘러 싼 함수 내부의 값을 캡처하고, 이름이 있는 중첩 함수자신을 둘러싼 컨텍스트의 값을 캡처하고, 이름이 없는 클로저 표현식일반적인 상황에서 다음과 같은 최적화를 통해.. 2023. 5. 28.