[iOS개발 강의] (2 주차) swift 기본문법 2
Computer Science/ios

[iOS개발 강의] (2 주차) swift 기본문법 2

728x90
반응형

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(중첩 함수)는 실제로 클로저의 특수한 경우입니다.

클로저는 다음 세 가지 형식 중 하나를 취합니다.

  1. Global functions are closures that have a name and don’t capture any values.
    • 전역 함수는 이름이 있고 값을 캡처하지 않는 클로저입니다.
  2. Nested functions are closures that have a name and can capture values from their enclosing function.
    • 중첩된 함수는 이름이 있고 둘러싸는 함수에서 값을 캡처할 수 있는 클로저입니다.
  3. 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(사전)은 키-값 연관의 정렬되지 않은 컬렉션입니다.

swift 공식 문서

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"]

 

배열 관련 함수

더보기

배열 생성

배열 리터럴을 사용하는 것 외에도 이러한 이니셜라이저를 사용하여 배열을 만들 수도 있습니다.
init()
비어 있는 새 배열을 만듭니다.
init<S>(S)
시퀀스의 요소를 포함하는 컬렉션의 새 인스턴스를 만듭니다.
init<S>(S)
시퀀스의 요소를 포함하는 배열을 만듭니다.
init(repeating: Element, count: Int)
단일 반복 값의 지정된 수를 포함하는 새 배열을 만듭니다.
init(unsafeUninitializedCapacity: Int, initializingWith: (inout UnsafeMutableBufferPointer<Element>, inout Int) -> Void)
지정된 용량으로 배열을 만든 다음 배열의 초기화되지 않은 메모리를 덮는 버퍼로 지정된 클로저를 호출합

배열 검사

var isEmpty: Bool
컬렉션이 비어 있는지 여부를 나타내는 부울 값입니다.
var count: Int
배열의 요소 수입니다.
var capacity: Int
새 스토리지를 할당하지 않고 어레이에 포함될 수 있는 총 요소 수입니다.

요소 액세스

subscript(Int) -> Element
지정된 위치의 요소에 액세스합니다.
var first: Element?
컬렉션의 첫 번째 요소입니다.
var last: Element?
컬렉션의 마지막 요소입니다.
subscript(Range<Int>) -> ArraySlice<Element>
배열 요소의 연속 하위 범위에 액세스합니다.
subscript(Range<Int>) -> Slice<Array<Element>>
컬렉션 요소의 인접한 하위 범위에 액세스합니다.
subscript<R>(R) -> ArraySlice<Element>
범위 식으로 지정된 컬렉션 요소의 연속 하위 범위에 액세스합니다.
func randomElement() -> Element?
컬렉션의 임의 요소를 반환합니다.
func randomElement<T>(using: inout T) -> Element?
주어진 생성기를 임의성의 소스로 사용하여 컬렉션의 임의 요소를 반환합니다.
 

요소 추가

func append(Element)
배열 끝에 새 요소를 추가합니다.
func insert(Element, at: Int)
지정된 위치에 새 요소를 삽입합니다.
func insert<C>(contentsOf: C, at: Int)
컬렉션의 지정된 위치에 시퀀스의 요소를 삽입합니다.
func replaceSubrange<C>(Range<Int>, with: C)
요소 범위를 지정된 컬렉션의 요소로 바꿉니다.
func replaceSubrange<C, R>(R, with: C)
요소의 지정된 하위 범위를 지정된 컬렉션으로 바꿉니다.
func reserveCapacity(Int)
지정된 수의 요소를 저장하기에 충분한 공간을 예약합니다.

배열 결합

func append<S>(contentsOf: S)
배열의 끝에 시퀀스의 요소를 추가합니다.
func append<S>(contentsOf: S)
이 컬렉션의 끝에 시퀀스 또는 컬렉션의 요소를 추가합니다.
static func + <Other>(Other, Array<Element>) -> Array<Element>
시퀀스의 요소와 컬렉션을 연결하여 새 컬렉션을 만듭니다.
static func + <Other>(Array<Element>, Other) -> Array<Element>
컬렉션의 요소와 시퀀스를 연결하여 새 컬렉션을 만듭니다.
static func + <Other>(Array<Element>, Other) -> Array<Element>
두 컬렉션의 요소를 연결하여 새 컬렉션을 만듭니다.
static func += <Other>(inout Array<Element>, Other)
범위 대체 가능 컬렉션에 시퀀스의 요소를 추가합니다.

요소 제거

func remove(at: Int) -> Element
지정된 위치에서 요소를 제거하고 반환합니다.
func removeFirst() -> Element
컬렉션의 첫 번째 요소를 제거하고 반환합니다.
func removeFirst(Int)
컬렉션의 시작 부분에서 지정된 수의 요소를 제거합니다.
func removeLast() -> Element
컬렉션의 마지막 요소를 제거하고 반환합니다.
func removeLast(Int)
컬렉션의 끝에서 지정된 수의 요소를 제거합니다.
func removeSubrange(Range<Int>)
컬렉션에서 지정된 하위 범위의 요소를 제거합니다.
func removeSubrange<R>(R)
컬렉션에서 지정된 하위 범위의 요소를 제거합니다.
func removeAll(where: (Element) -> Bool)
주어진 술어를 만족하는 모든 요소를 ​​제거합니다.
func removeAll(keepingCapacity: Bool)
배열에서 모든 요소를 ​​제거합니다.
func popLast() -> Element?
컬렉션의 마지막 요소를 제거하고 반환합니다.

요소 찾기

func contains(Element) -> Bool
시퀀스에 지정된 요소가 포함되어 있는지 여부를 나타내는 부울 값을 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func contains(where: (Element) -> Bool) -> Bool
시퀀스에 주어진 조건자를 만족하는 요소가 포함되어 있는지 여부를 나타내는 부울 값을 반환합니다.
func allSatisfy((Element) -> Bool) -> Bool
시퀀스의 모든 요소가 주어진 조건자를 충족하는지 여부를 나타내는 부울 값을 반환합니다.
func first(where: (Element) -> Bool) -> Element?
주어진 조건자를 만족하는 시퀀스의 첫 번째 요소를 반환합니다.
func firstIndex(of: Element) -> Int?
컬렉션에서 지정된 값이 나타나는 첫 번째 인덱스를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func index(of: Element) -> Int?
컬렉션에서 지정된 값이 나타나는 첫 번째 인덱스를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
더 이상 사용되지 않음
func firstIndex(where: (Element) -> Bool) -> Int?
컬렉션의 요소가 주어진 조건자를 만족하는 첫 번째 인덱스를 반환합니다.
func last(where: (Element) -> Bool) -> Element?
주어진 술어를 만족하는 시퀀스의 마지막 요소를 반환합니다.
func lastIndex(of: Element) -> Int?
컬렉션에서 지정된 값이 나타나는 마지막 인덱스를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func lastIndex(where: (Element) -> Bool) -> Int?
주어진 술어와 일치하는 컬렉션의 마지막 요소 인덱스를 반환합니다.
func min() -> Element?
시퀀스의 최소 요소를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Comparable.
func min(by: (Element, Element) -> Bool) -> Element?
주어진 술어를 요소 간의 비교로 사용하여 시퀀스의 최소 요소를 리턴합니다.
func max() -> Element?
시퀀스의 최대 요소를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Comparable.
func max(by: (Element, Element) -> Bool) -> Element?
주어진 술어를 요소 간의 비교로 사용하여 시퀀스의 최대 요소를 리턴합니다.

요소 선택

func prefix(Int) -> ArraySlice<Element>
컬렉션의 초기 요소를 포함하는 지정된 최대 길이까지 하위 시퀀스를 반환합니다.
func prefix(through: Int) -> ArraySlice<Element>
컬렉션의 시작부터 지정된 위치까지의 하위 시퀀스를 반환합니다.
func prefix(upTo: Int) -> ArraySlice<Element>
컬렉션의 시작부터 지정된 위치까지(포함하지 않음)까지의 하위 시퀀스를 반환합니다.
func prefix(while: (Element) -> Bool) -> ArraySlice<Element>
반환할 때까지 초기 요소를 포함하는 하위 시퀀스를 predicate반환 false하고 나머지 요소는 건너뜁니다.
func suffix(Int) -> ArraySlice<Element>
컬렉션의 최종 요소를 포함하는 지정된 최대 길이까지 하위 시퀀스를 반환합니다.
func suffix(from: Int) -> ArraySlice<Element>
지정된 위치에서 컬렉션 끝까지의 하위 시퀀스를 반환합니다.

요소 제외

func dropFirst(Int) -> ArraySlice<Element>
주어진 수의 초기 요소를 제외한 모든 요소를 ​​포함하는 하위 시퀀스를 반환합니다.
func dropLast(Int) -> ArraySlice<Element>
지정된 수의 최종 요소를 제외한 모든 요소를 ​​포함하는 하위 시퀀스를 반환합니다.
func drop(while: (Element) -> Bool) -> ArraySlice<Element>
반환하는 동안 요소를 건너뛰고 나머지 요소 를 predicate반환 하여 하위 시퀀스를 반환합니다.true

배열 변환

func map<T>((Element) -> T) -> [T]
시퀀스의 요소에 대해 주어진 클로저를 매핑한 결과를 포함하는 배열을 반환합니다.
func flatMap<SegmentOfResult>((Element) -> SegmentOfResult) -> [SegmentOfResult.Element]
이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 연결된 결과를 포함하는 배열을 반환합니다.
func compactMap<ElementOfResult>((Element) -> ElementOfResult?) -> [ElementOfResult]
nil이 시퀀스의 각 요소로 주어진 변환을 호출한 결과가 아닌 배열을 반환합니다 .
func reduce<Result>(Result, (Result, Element) -> Result) -> Result
주어진 클로저를 사용하여 시퀀스의 요소를 결합한 결과를 반환합니다.
func reduce<Result>(into: Result, (inout Result, Element) -> ()) -> Result
주어진 클로저를 사용하여 시퀀스의 요소를 결합한 결과를 반환합니다.
var lazy: LazySequence<Array<Element>>
이 시퀀스와 동일한 요소를 포함하지만 map및 와 같은 일부 연산 filter이 느리게 구현되는 시퀀스입니다.

배열의 요소 반복하기

func forEach((Element) -> Void)
for- in루프 와 같은 순서로 시퀀스의 각 요소에 대해 주어진 클로저를 호출합니다 .
func enumerated() -> EnumeratedSequence<Array<Element>>
쌍의 시퀀스( n , x )를 반환합니다. 여기서 n 은 0에서 시작하는 연속적인 정수를 나타내고 x 는 시퀀스의 요소를 나타냅니다.
func makeIterator() -> IndexingIterator<Array<Element>>
컬렉션의 요소에 대한 반복자를 반환합니다.
var underestimatedCount: Int
컬렉션의 요소 수보다 작거나 같은 값입니다.

배열 요소 재정렬

func sort()
컬렉션을 제자리에 정렬합니다.
Element에 부합할 때 사용 가능 합니다 Comparable.
func sort(by: (Element, Element) -> Bool)
주어진 술어를 요소 간의 비교로 사용하여 컬렉션을 제자리에 정렬합니다.
func sorted() -> [Element]
정렬된 시퀀스의 요소를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Comparable.
func sorted(by: (Element, Element) -> Bool) -> [Element]
요소 간의 비교로 주어진 술어를 사용하여 정렬된 시퀀스의 요소를 리턴합니다.
func reverse()
컬렉션의 요소를 제자리에서 뒤집습니다.
func reversed() -> ReversedCollection<Array<Element>>
컬렉션의 요소를 역순으로 표시하는 뷰를 반환합니다.
func shuffle()
컬렉션을 제자리에서 섞습니다.
func shuffle<T>(using: inout T)
임의의 소스로 지정된 생성기를 사용하여 컬렉션을 제자리에서 섞습니다.
func shuffled() -> [Element]
순서를 섞은 요소를 반환합니다.
func shuffled<T>(using: inout T) -> [Element]
임의의 소스로 지정된 생성기를 사용하여 섞인 시퀀스의 요소를 반환합니다.
func partition(by: (Element) -> Bool) -> Int
주어진 술어와 일치하는 모든 요소가 일치하지 않는 모든 요소 뒤에 오도록 컬렉션 요소를 재정렬합니다.
func swapAt(Int, Int)
컬렉션의 지정된 인덱스에서 값을 교환합니다.

요소 분할 및 결합

func split(separator: Element, maxSplits: Int, omittingEmptySubsequences: Bool) -> [ArraySlice<Element>]
주어진 요소와 동일한 요소 주위에서 컬렉션의 가능한 가장 긴 하위 시퀀스를 순서대로 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func split(maxSplits: Int, omittingEmptySubsequences: Bool, whereSeparator: (Element) -> Bool) -> [ArraySlice<Element>]
주어진 술어를 만족하는 요소를 포함하지 않는 컬렉션의 가능한 가장 긴 하위 시퀀스를 순서대로 반환합니다.
func joined() -> FlattenSequence<Array<Element>>
연결된 이 시퀀스 시퀀스의 요소를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Sequence.
func joined<Separator>(separator: Separator) -> JoinedSequence<Array<Element>>
이 시퀀스 시퀀스의 연결된 요소를 반환하고 각 요소 사이에 지정된 구분 기호를 삽입합니다.
Element에 부합할 때 사용 가능 합니다 Sequence.
func joined(separator: String) -> String
시퀀스의 요소를 연결하고 각 요소 사이에 지정된 구분 기호를 추가하여 새 문자열을 반환합니다.
에 사용할 수 Element있습니다 String.
func joined(separator: String) -> String
시퀀스의 요소를 연결하고 각 요소 사이에 지정된 구분 기호를 추가하여 새 문자열을 반환합니다.
Element에 부합할 때 사용 가능 합니다 .StringProtocol

차이 생성 및 적용

func applying(CollectionDifference<Element>) -> Array<Element>?
이 컬렉션에 지정된 차이를 적용합니다.
func difference<C>(from: C) -> CollectionDifference<Element>
주어진 컬렉션에서 이 컬렉션의 정렬된 요소를 생성하는 데 필요한 차이를 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func difference<C>(from: C, by: (C.Element, Element) -> Bool) -> CollectionDifference<Element>
주어진 술어를 동등성 테스트로 사용하여 주어진 콜렉션에서 이 콜렉션의 정렬된 요소를 생성하는 데 필요한 차이를 리턴합니다.

배열 비교

static func == (Array<Element>, Array<Element>) -> Bool
두 배열이 같은 순서로 같은 요소를 포함하는지 여부를 나타내는 부울 값을 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
static func != (Array<Element>, Array<Element>) -> Bool
두 값이 같지 않은지 여부를 나타내는 부울 값을 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func elementsEqual<OtherSequence>(OtherSequence) -> Bool
이 시퀀스와 다른 시퀀스가 ​​같은 순서로 동일한 요소를 포함하는지 여부를 나타내는 부울 값을 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func elementsEqual<OtherSequence>(OtherSequence, by: (Element, OtherSequence.Element) -> Bool) -> Bool
주어진 술어를 동등성 테스트로 사용하여 이 시퀀스와 다른 시퀀스가 ​​동일한 순서로 등가 요소를 포함하는지 여부를 나타내는 부울 값을 반환합니다.
func starts<PossiblePrefix>(with: PossiblePrefix) -> Bool
시퀀스의 초기 요소가 다른 시퀀스의 요소와 동일한지 여부를 나타내는 부울 값을 반환합니다.
Element에 부합할 때 사용 가능 합니다 Equatable.
func starts<PossiblePrefix>(with: PossiblePrefix, by: (Element, PossiblePrefix.Element) -> Bool) -> Bool
주어진 술어를 동등성 테스트로 사용하여 시퀀스의 초기 요소가 다른 시퀀스의 요소와 동일한지 여부를 나타내는 부울 값을 반환합니다.
func lexicographicallyPrecedes<OtherSequence>(OtherSequence) -> Bool
<요소를 비교하기 위해 보다 작음 연산자( )를 사용하여 사전순(사전) 순서에서 시퀀스가 ​​다른 시퀀스보다 선행하는지 여부를 나타내는 부울 값을 반환합니다 .
Element에 부합할 때 사용 가능 합니다 Comparable.
func lexicographicallyPrecedes<OtherSequence>(OtherSequence, by: (Element, Element) -> Bool) -> Bool
요소를 비교하기 위해 주어진 술어를 사용하여 사전순(사전) 순서에서 시퀀스가 ​​다른 시퀀스보다 선행하는지 여부를 나타내는 부울 값을 반환합니다.

지수 조작

var startIndex: Int
비어 있지 않은 배열에서 첫 번째 요소의 위치입니다.
var endIndex: Int
배열의 "끝을 지난" 위치, 즉 마지막 유효한 첨자 인수보다 하나 큰 위치입니다.
func index(after: Int) -> Int
주어진 인덱스 바로 뒤의 위치를 ​​반환합니다.
func formIndex(after: inout Int)
지정된 인덱스를 후속 인덱스로 바꿉니다.
func index(before: Int) -> Int
주어진 인덱스 바로 앞의 위치를 ​​반환합니다.
func formIndex(before: inout Int)
주어진 인덱스를 선행 인덱스로 바꿉니다.
func index(Int, offsetBy: Int) -> Int
주어진 인덱스로부터 지정된 거리에 있는 인덱스를 반환합니다.
func formIndex(inout Int, offsetBy: Int)
지정된 거리만큼 지정된 인덱스를 오프셋합니다.
func index(Int, offsetBy: Int, limitedBy: Int) -> Int?
거리가 지정된 제한 인덱스를 벗어나지 않는 한 지정된 인덱스에서 지정된 거리인 인덱스를 반환합니다.
func formIndex(inout Int, offsetBy: Int, limitedBy: Int) -> Bool
지정된 거리만큼 지정된 인덱스를 오프셋하거나 지정된 제한 인덱스와 같도록 합니다.
func distance(from: Int, to: Int) -> Int
두 인덱스 사이의 거리를 반환합니다.

기본 스토리지 액세스

func withUnsafeBufferPointer<R>((UnsafeBufferPointer<Element>) -> R) -> R
배열의 연속 스토리지에 대한 포인터로 클로저를 호출합니다.
func withUnsafeMutableBufferPointer<R>((inout UnsafeMutableBufferPointer<Element>) -> R) -> R
배열의 변경 가능한 연속 저장소에 대한 포인터를 사용하여 지정된 클로저를 호출합니다.
func withUnsafeBytes<R>((UnsafeRawBufferPointer) -> R) -> R
배열의 연속 스토리지의 기본 바이트에 대한 포인터를 사용하여 지정된 클로저를 호출합니다.
func withUnsafeMutableBytes<R>((UnsafeMutableRawBufferPointer) -> R) -> R
배열의 변경 가능한 연속 저장소의 기본 바이트에 대한 포인터를 사용하여 지정된 클로저를 호출합니다.
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Element>) -> R) -> R?
콜렉션 body(p)의 p연속 스토리지에 대한 포인터입니다. 그러한 저장소가 없으면 먼저 생성됩니다. 컬렉션이 연속 저장소 형태의 내부 표현을 지원하지 않는 경우 body호출되지 않고 nil반환됩니다.
func withContiguousMutableStorageIfAvailable<R>((inout UnsafeMutableBufferPointer<Element>) -> R) -> R?
콜렉션 body(p)의 p변경 가능한 연속 저장소에 대한 포인터입니다. 그러한 저장소가 없으면 먼저 생성됩니다. 컬렉션이 변경 가능한 연속 저장소 형태의 내부 표현을 지원하지 않으면 body가 호출되지 않고 nil반환됩니다.
 

 

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 앱 개발 강의

728x90
반응형

'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