λ°μν
μ λ€λ¦ (Generic)
- νμ μ νλΌλ―Έν°ν νμ¬ μ»΄νμΌ νμμ ꡬ체μ μΈ νμ μ΄ κ²°μ λλ κ²μ μλ―Έ
- μ λ€λ¦μ μ΄μ©νλ©΄ νμ μ μ μ°νκ² λμ²νλ κ²μ΄ κ°λ₯
- μ λ€λ¦μΌλ‘ ꡬνν κΈ°λ₯κ³Ό νμ μ μ¬μ¬μ©μ μ©μ΄
- μ½λμ μ€λ³΅μ μ€μΌ μ μμ΄μ κΉλν ννμ΄ κ°λ₯
- Swiftμμμ λνμ μΈ μ λ€λ¦ νμ μΌλ‘λ Arrayμ Dictionary νμ μ΄
- Arrayμ Dictionaryλ Int κ°μ μ μ₯ν μλ μκ³ , String κ°μ μ μ₯ν μλ μμΌλ―λ‘, νμ μ μ νμ΄ μμ
// String νμ
μ κ°λ λκ°μ κ°μ λ°κΎΈλ ν¨μ
func swapTwoStrings(_ a: inout String, _ b: inout String) {
let temporaryA = a
a = b
b = temporaryA
}
// Double νμ
μ κ°λ λκ°μ κ°μ λ°κΎΈλ ν¨μ
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let temporaryA = a
a = b
b = temporaryA
}
// μ λ€λ¦ νμ
μ νμ©νμ¬ λ€μν νμ
μ κ°μ λ°κΎΈλ ν¨μ
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
νμ νλΌλ―Έν° (Type Parameters)
- μ swapTwoValues ν¨μμ μμ μμ Tλ νμ νλΌλ―Έν°μ μμ
- νμ νλΌλ―Έν°λ κΊ½μ κ΄νΈ (<>) μ¬μ΄μ, 견본 (placeholder) νμ μ μ§μ ν λ€μμ μ΄λ¦μ μ§μ νκ³ , ν¨μμ μ΄λ¦ λ°λ‘ λ€μ μμ±
- νμ νλΌλ―Έν°λ₯Ό νλ² μ μΈνλ©΄ μ΄ κ²μ ν¨μμ νμ μΌλ‘ μ¬μ© κ°λ₯
- 볡μμ νμ νλΌλ―Έν°λ₯Ό μ¬μ©ν λλ <T, U>μ κ°μ΄ μ½€λ§λ‘ ꡬλΆ
νμ νλΌλ―Έν° μ΄λ¦ μ§κΈ°
- Dictionaryμ κ°μ΄ μλ¦¬λ¨ΌνΈ κ°μ μλ‘ μκ΄κ΄κ³κ° μλ κ²½μ° μλ―Έκ° μλ μ΄λ¦μ νλΌλ―Έν° μ΄λ¦μΌλ‘ λΆμ
- κ·Έλ μ§ μμ κ²½μ°λ T , U , Vμ κ°μ λ¨μΌ λ¬Έμλ‘ νλΌλ―Έν° μ΄λ¦μ μ¬μ©
- κ°μ΄ μλλΌ νμ μ λν placeholder μμ κ°λ¦¬ν€κΈ° μν΄, νμ νμ λ§€κ°λ³μμ μ΄λ¦μλ μΉ΄λ© νκΈ°λ²μ μ¬μ©
νμ μ μ½ μ¬ν
- νμ μ μ½μ¬νμ νμ λ§€κ°λ³μκ° νΉμ ν΄λμ€μμ μμλμ΄μΌ νκ±°λ, νΉμ νλ‘ν μ½μ΄λ νλ‘ν μ½ ν©μ±μ μ€μνλ κ²μ μ§μ
- μλ₯Ό λ€μ΄, Swiftμ Dictionary νμ μ λμ λ리μ ν€λ‘ μ¬μ©λ μ μλ νμ μ Hashableλ‘ μ ν
- λ¨μΌ ν΄λμ€λ νμ λ§€κ°λ³μ μ΄λ¦ λ€μ νμ λ§€κ°λ³μ λͺ©λ‘μΌλ‘ μ½λ‘ (:)μΌλ‘ ꡬλΆλ, νλ‘ν μ½ μ μ½μ¬νμ μμΉμμΌμ νμ μ μ½μ¬νμ μμ±
func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U)
{
// ...
}
μ°κ΄ νμ (Associated Types)
- μ°κ΄ νμ (associated type)μ νλ‘ν μ½μμ μ¬μ©λλ νμ μ placeholder μ΄λ¦μ μ£Όλ κ²
- μ°κ΄ νμ μ μ¬μ©νλ μ€μ νμ μ νλ‘ν μ½μ΄ μ±νλ λκΉμ§ μ§μ λμ§ μμ
- μ°κ΄ νμ μ associatedtype ν€μλλ‘ μ§μ
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
μ λ€λ¦ Whereμ
- νΉμ νλ‘ν μ½μ λ°λμ μ€μνλ μ°κ΄λ νμ μ κ°μ Έμ€κ±°λ, νΉμ νμ λ§€κ°λ³μμ μ°κ΄λ νμ μ΄ λμΌνκ² νλ κ²μ΄ κ°λ₯
- where ν€μλλ‘ μμ
- μ°κ΄λ νμ λλ νμ κ³Ό μ°κ΄λ νμ κ°μ λλ±ν κ΄κ³μ λν μ μ½μ¬νμ΄ λ€λ°λ¦
- μ λ€λ¦ whereμ μ νμ μ΄λ ν¨μμ λ³Έλ¬Έμ μ΄λ¦° μ€κ΄νΈ({}) λ°λ‘ μμ μμ±
extension Array where Element: FixedWidthInteger {
mutating func pop() -> Element { return self.removeLast() }
}
λ°μν
'β¨οΈ Language > swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ κ·Ό μ μ΄ (Access Control) (0) | 2023.02.07 |
---|---|
[Swift] ARC (0) | 2023.02.07 |
[Swift] μλ¬ μ²λ¦¬ (0) | 2023.02.07 |
[νλ‘κ·Έλλ¨Έμ€ LV.1] μλ°μλ°μλ°μλ°μλ°μ? (0) | 2023.02.07 |
[νλ‘κ·Έλλ¨Έμ€ LV.1] μμ μ°ΎκΈ° (0) | 2023.02.07 |