코딩하는 제리

[Swift] Generic 제너릭 본문

iOS/SwiftUI

[Swift] Generic 제너릭

JerryCho 2022. 1. 12. 16:19

- 기능은 같고 매개변수형(파라미터 데이터 타입)만 다른 함수

// 제너릭 명은 자유롭게 변경 가능하나 보통 T로 사용
func swapAny<T>(_ a: inout T, _ b: inout T) {
	let temp = a
	a = b
	b = temp
}

// Int형
var x = 10
var y = 20
swapAny(&x, &y)

// Double형
var xd = 10.3
var yd = 20.7
swapAny(&xd, &yd)

// String형
var xd = "Hi"
var yd = "Hello"
swapAny(&xs, &ys)
struct IntStack {
	var items = [Int]() // 배열 선언

	mutating func push(_ item: Int) {
		items.appned(item) // 배열에 아이템 추가
	}

	mutating func pop() -> Int {
		return items.removeLast() // 배열의 마지막 아이템 삭제
	}
}
// 제너릭을 사용하지 않은 호출법
var stackOfInt = IntStack()



 // 제너릭으로 변경
 struct AnyStack <T> {
	var items = [T]() // 배열 선언

	mutating func push(_ item: T) {
		items.appned(item) // 배열에 아이템 추가
	}

	mutating func pop() -> T {
		return items.removeLast() // 배열의 마지막 아이템 삭제
	}
}
// 제너릭을 사용한 호출법
var stackOfInt = AnyStack<Int>()
var stackOfString = AnyStack<String>()
var stackOfDouble = AnyStack<Double>()

print(stackOfInt.pop()) // 삭제된 아이템 출력
@frozen 키워드
  - @frozen struct Array<Element>
    -@frozen은 저장프로퍼티 추가, 삭제 불가능

swift의 배열도 generic 구조체이다.
  - var x: [Int] = []
  - var y = [Int]()
  - var z: Array<Int> = []
  - var a: [Int] = [1, 2, 3, 4]
  - var b: Array<Int> = [1, 2, 3, 4]
  - var c: Array<Double> = [1.2, 2.3, 3.4]

 

 

'iOS > SwiftUI' 카테고리의 다른 글

[Swift] 인스턴스 초기화  (0) 2022.01.13
[Swift] delegate/datasource  (0) 2022.01.13
[Swift] Error Handling (Exeption Handling)  (0) 2022.01.12
[Swift} 옵셔널 체이닝(Optional Chaining)  (0) 2022.01.12
[Swift] protocol  (0) 2022.01.12
Comments