Closure 클로저
클로저란?
Swift 공식사이트 정의
Closures are self-contained blocks of functionality that can be passed around and used in your code.
클로저는 전달되고 코드에서 사용할 수 있는 자체 포함된 기능 블록입니다.
Closures in Swift are similar to blocks in C and Objective-C and to lambdas in other programming languages.
Swift의 클로저는 C 및 Objective-C의 블록 및 다른 프로그래밍 언어의 람다와 유사합니다.
Closures can capture and store references to any constants and variables from the context in which they’re defined. This is known as closing over those constants and variables. Swift handles all of the memory management of capturing for you.
클로저는 정의된 컨텍스트에서 모든 상수 및 변수에 대한 참조를 캡처하고 저장할 수 있습니다.
이것은 해당 상수와 변수를 닫는 것으로 알려져 있습니다. Swift는 캡처의 모든 메모리 관리를 처리합니다.
일반적인 함수의 Global function(전역 함수) 및 Nested function(중첩 함수)는 실제로 클로저의 특수한 경우입니다.
클로저는 다음 세 가지 형식 중 하나를 취합니다.
- Global functions are closures that have a name and don’t capture any values.
- 전역 함수는 이름이 있고 값을 캡처하지 않는 클로저입니다.
- Nested functions are closures that have a name and can capture values from their enclosing function.
- 중첩된 함수는 이름이 있고 둘러싸는 함수에서 값을 캡처할 수 있는 클로저입니다.
- Closure expressions are unnamed closures written in a lightweight syntax that can capture values from their surrounding context.
- Swift의 클로저 표현식은 일반 시나리오에서 간결하고 깔끔한 구문을 권장하는 최적화와 함께 깨끗하고 명확한 스타일을 가지고 있습니다. 이러한 최적화에는 다음이 포함됩니다.
Swift 의 closure 표현식의 사용
- 컨텍스트에서 매개변수 및 반환 값 유형 추론(Inferring parameter and return value types from context)
- 단일 표현식 클로저의 암시적 반환(Implicit returns from single-expression closures)
- 약식 인수 이름(Shorthand argument names)
- 후행 클로저 구문(Trailing closure syntax)
참고
클로저 공식 문서
https://docs.swift.org/swift-book/LanguageGuide/Closures.html#ID103
클로저 사용 시 타이밍 문제 방지
https://developer.apple.com/documentation/swift/preventing_timing_problems_when_using_closures
Swift Collection
Swift는 값 컬렉션을 저장하기 위해 Array,Set, Dictionary 세 가지 기본 컬렉션 유형을 제공합니다.
Array(배열)은 정렬된 값 모음입니다.
Set(집합)은 고유한 값의 정렬되지 않은 컬렉션입니다.
Dictionary(사전)은 키-값 연관의 정렬되지 않은 컬렉션입니다.
Mutability of Collections(컬렉션의 가변성)
배열, 집합 또는 사전을 만들고 변수에 할당하면 생성된 컬렉션이 변경 가능합니다. 즉, 컬렉션의 항목을 추가, 제거 또는 변경하여 컬렉션을 만든 후 컬렉션을 변경(또는 변형)할 수 있습니다.
배열, 집합 또는 사전을 상수에 할당하면 해당 컬렉션은 변경할 수 없으며 크기와 내용을 변경할 수 없습니다.
1. Array 배열
선언
@frozen struct Array<Element>
개요
배열은 앱에서 가장 일반적으로 사용되는 데이터 유형 중 하나입니다.
배열을 사용하여 앱의 데이터를 구성합니다.
특히 Array배열 유형인 단일 유형의 요소를 보유하는 데 유형을 사용합니다 Element. 배열은 정수에서 문자열, 클래스에 이르기까지 모든 종류의 요소를 저장할 수 있습니다.
// An array of 'Int' elements
let oddNumbers = [1, 3, 5, 7, 9, 11, 13, 15]
// An array of 'String' elements
let streets = ["Albemarle", "Brandywine", "Chesapeake"]
배열 관련 함수
배열 생성
배열 검사
요소 액세스
요소 추가
배열 결합
요소 제거
요소 찾기
요소 선택
요소 제외
배열 변환
배열의 요소 반복하기
배열 요소 재정렬
요소 분할 및 결합
차이 생성 및 적용
배열 비교
지수 조작
기본 스토리지 액세스
Set
Dictionary
swift 구조체와 클래스
swift 구조체와 클래스는 모두 데이터 및 모델 동작을 저장하는 방법을 결정합니다.
구조와 클래스는 앱에서 데이터를 저장하고 동작을 모델링하는 데 좋은 선택이지만 유사성으로 인해 서로를 선택하기 어려울 수 있습니다.
앱에 새 데이터 유형을 추가할 때 적합한 옵션을 선택하는 데 도움이 되도록 다음 권장 사항을 고려하십시오.
- 기본적으로 구조를 사용합니다.
- Objective-C 상호 운용성이 필요할 때 클래스를 사용하십시오.
- 모델링 중인 데이터의 ID를 제어해야 하는 경우 클래스를 사용하십시오.
- 프로토콜과 함께 구조를 사용하여 구현을 공유하여 동작을 채택합니다.
구조체와 클래스 공통점
- 값을 저장할 속성 정의
- 기능을 제공하는 메소드 정의
- 첨자 구문을 사용하여 값에 대한 액세스를 제공하도록 첨자를 정의합니다.
- 초기 상태를 설정하기 위한 이니셜라이저 정의
- 기본 구현 이상으로 기능을 확장하도록 확장
- 특정 종류의 표준 기능을 제공하는 프로토콜 준수
- 자세한 내용은 속성, 메서드, 첨자, 초기화, 확장 및 프로토콜을 참조하세요.
구조체와 클래스 차이점 (클래스 추가기능)
- 상속을 통해 한 클래스가 다른 클래스의 특성을 상속할 수 있습니다.
- 유형 캐스팅을 사용하면 런타임에 클래스 인스턴스의 유형을 확인하고 해석할 수 있습니다.
- Deinitializers는 클래스의 인스턴스가 할당된 리소스를 해제할 수 있도록 합니다.
- 참조 카운팅은 클래스 인스턴스에 대한 둘 이상의 참조를 허용합니다.
구조체 Syntax
struct SomeStructure {
// structure definition goes here
}
클래스 Syntax
class SomeClass {
// class definition goes here
}
사용 사례
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
Structures and Enumerations Are Value Types
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
Classes Are Reference Types
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
참고
#패스트캠퍼스 #내일배움카드 #K디지털크레딧 #나만의 iOS 앱 개발 강의
'Computer Science > ios' 카테고리의 다른 글
[iOS개발 강의] (1 주차) swift 기본문법 (0) | 2022.01.25 |
---|---|
food chart (0) | 2012.12.20 |
muaic chart (0) | 2012.12.20 |
ManagedObject & EntityDescription 얻기 (0) | 2012.11.07 |