μλ νμΈμ~
μ€λμ Genericsμ λν΄μ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
Swiftμμ Generics μ¬μ©νκΈ°
Genericsλ Swiftμ κ°λ ₯ν κΈ°λ₯ μ€ νλλ‘
ν¨μ, λ©μλ, ν΄λμ€, μ΄κ±°ν λ±μμ μ¬μ¬μ© κ°λ₯ν μ½λλ₯Ό μμ±ν λ μ¬μ©λ©λλ€.
νΉν, μλ‘ λ€λ₯Έ νμ μμ λμνλ μ½λλ₯Ό μμ±ν λ μ μ©ν©λλ€.
μλ₯Ό λ€μ΄, Int λ°°μ΄, String λ°°μ΄ λλ λͺ¨λ νμ μ λ°°μ΄μ λ€λ£¨λ ν¨μλ₯Ό μμ±ν μ μμ΅λλ€.
μ΄λ¬ν ν¨μλ₯Ό μΌλ°ννμ¬ λ°°μ΄ λ΄λΆμ λͺ¨λ κ°μ λν΄ λμνλλ‘ λ§λ€ μ μμ΅λλ€.
Genericsμ ꡬ문
Genericsλ λ€μκ³Ό κ°μ ꡬ문μΌλ‘ μμ±λ©λλ€.
func functionName<T>(parameter1: T, parameter2: T) {
}
Tλ μμμ νμ μ λνλ΄λ μΌλ°μ μΈ μ΄λ¦μ λλ€.
μ¬κΈ°μ, ν¨μμ 맀κ°λ³μ λ° λ°ν κ°μ T νμ μΌλ‘ μ μΈλ©λλ€.
T λμ μνλ λ¬Έμλ₯Ό μ¬μ©ν μ μμ§λ§, 보ν΅μ κ²½μ° Tλ₯Ό μ¬μ©νλ€κ³ ν©λλ€.
μλ₯Ό λ€μ΄, Int κ°μ λνλ ν¨μλ₯Ό μμ±ν΄ λ³΄κ² μ΅λλ€.
func addInts<T: Numeric>(a: T, b: T) -> T {
return a + b
}
μ΄ ν¨μλ μμμ Numeric νμ Tμ λν΄μλ§ λμν©λλ€.
Numeric νλ‘ν μ½μ μ«μλ₯Ό λνλ΄λ νμ μ μ μ©λλλ° Int, Double, Float λ±μ νμ μ΄ μ΄ νλ‘ν μ½μ λ°λ₯΄κ³ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ μ¬μ©ν μ μμ΅λλ€.
let answer1 = addInts(a: 3, b: 4) // 7
let answer2 = addInts(a: 3.1, b: 22.5) // 25.6
Genericsλ λ°°μ΄μμλ μ¬μ©ν΄ λ³Ό μ μμ΅λλ€.
func sortArray<T: Comparable>(array: [T]) -> [T] {
return array.sorted()
}
μ ν¨μλ Comparable νμ Tμ λν΄μλ§ λμν©λλ€.
Comparable νλ‘ν μ½μ λΉκ΅ κ°λ₯ν κ°μ μ μ©λ©λλ€.
μλ₯Ό λ€μ΄ Int, String λ±μ νμ μ΄ μ΄ νλ‘ν μ½μ λ°λ₯΄κ³ μμ΅λλ€.
μμ ν¨μλ λ€μκ³Ό κ°μ΄ μ¬μ©ν μ μμ΅λλ€.
let intArray = [3, 1, 2, 9]
let sortedIntArray = sortArray(array: intArray) // [1, 2, 3, 9]
let stringArray = ["a", "C", "d", "b"]
let sortedStringArray = sortArray(array: stringArray) // ["a", "b", "c", "d"]
Genericsμ νμ© μμ
1. νμ μ λν μΌλ°μ μΈ μμ μ μννλ ν¨μλ₯Ό μμ±ν λ μ¬μ©ν©λλ€.
func swapValues<T: Int>(a: inout T, b: inout T) {
let temp = a
a = b
b = temp
}
μ μ½λμμ, swapValues ν¨μλ μμμ νμ Tμ λν΄ λμνλλ° λ κ°μ κ΅ννλ λ° μ¬μ©ν μ μμ΅λλ€.
2. κ°μ νλ‘ν μ½μ λ°λ₯΄λ κ°μ²΄λ₯Ό μ²λ¦¬νλ ν¨μλ₯Ό μμ±ν λ
protocol animal {
var bark: String { get }
}
struct Dog: animal {
var bark: String
}
struct Cat: animal {
var bark: String
}
func printAnimalBark<T: animal>(animal: T) {
print(animal.bark)
}
printAnimalBark(animal: Dog(bark: "λ©λ©")) // λ©λ©
printAnimalBark(animal: Cat(bark: "μΌμΉ")) // μΌμΉ
μ μ½λμμ, Animal νλ‘ν μ½μ μ±ννλ Dogμ Cat ꡬ쑰체λ₯Ό μ μν©λλ€.
printAnimalBark ν¨μλ μμμ Animal νμ Tμ λν΄ μλν©λλ€.
μμ μμ λ§κ³ λ
μλ£κ΅¬μ‘°(μ€ν, ν λ±)λ₯Ό ꡬνν λ, λ€νΈμν¬ μλ΅μ λν μ²λ¦¬λ₯Ό ν λ λ± μ¬μ©νλ κ³³μ΄ κ΅μ₯ν λ§μ΅λλ€.
μΆνμ κΈ°νκ° λλ€λ©΄ λ λ§μ μμλ€λ ν¨κ» μμ±ν΄λ³΄κ² μ΅λλ€.
κ·ΈλΌ μ΄λ§ ππ» ππ» ππ»
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ κ·Όμ μ΄μ(Access Control)μ λν΄μ (0) | 2023.03.15 |
---|---|
[Swift] Closureμ λν΄μ μμ보μ (0) | 2023.03.13 |
[Swift] ARC(Automatic Reference Counting)μ λν΄μ μμ보μ. (0) | 2023.03.04 |
[Swift] GCD(Grand Central Dispatch)μ λν΄μ (0) | 2023.03.01 |
[Swift] μ κ·μμ ν΅ν λ¬Έμμ΄ νλ¨ (0) | 2022.11.14 |