νμ₯
νμ₯(Extension)
- νμ₯μ μ΄μ©νμ¬ structure, class, enum, protocol νμ μ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μ μλ€.
- κΈ°μ‘΄ νμ μ κΈ°λ₯μ μΆκ°νλ μν νμ₯νλ κ°λ μ΄λ€.
- νμ₯μ νμ μ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μλ μμ§λ§, κΈ°μ‘΄μ μ‘΄μ¬νλ κΈ°λ₯μ μ¬μ μν μλ μλ€.
- μΈλΆμμ κ°μ Έμ¨ νμ μ λ΄κ° μνλ κΈ°λ₯μ μΆκ°νκ³ μ ν λ νμ₯μ μ¬μ©ν μ μλ€.
extension νμ₯ν νμ
μ΄λ¦ {
//νμ
μ μΆκ°λ μλ‘μ΄ κΈ°λ₯ ꡬν
}
extension νμ₯ν νμ
μ΄λ¦: νλ‘ν μ½1, νλ‘ν μ½2, νλ‘ν μ½3 {
//νλ‘ν μ½ μꡬμ¬ν ꡬν
}
νμ₯(Extension)μ΄ κ°λ₯ν κ²½μ°μ λΆκ°λ₯ν κ²½μ°
ExtensionμΌλ‘ ꡬν κ°λ₯ν κ²λ€:
- μλ‘μ΄ κ³μ°λ μμ±(Computed Property) μΆκ°
- μλ‘μ΄ μΈμ€ν΄μ€/νμ λ©μλ μΆκ°
- μλ‘μ΄ μ΄κΈ°ν(Initializer) μΆκ°
- νλ‘ν μ½ μ±ν(Protocol Conformance)
- μλΈμ€ν¬λ¦½νΈ μΆκ°(Subscripting)
- μ€μ²© νμ (Nested Type) μΆκ°
// 1. μλ‘μ΄ κ³μ°λ μμ±(Computed Property) μΆκ°
// String νμ
μ νμ₯νμ¬ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό λ°ννλ μμ± μΆκ°
extension String {
var length: Int {
return self.count
}
}
let str = "Hello"
print(str.length) // μΆλ ₯: 5 (μμ selfλ strμ΄ λλ€.)
// 2. μλ‘μ΄ μΈμ€ν΄μ€/νμ
λ©μλ μΆκ°
// Int νμ
μ νμ₯νμ¬ μ κ³± κ°μ λ°ννλ λ©μλ μΆκ°
extension Int {
func squared() -> Int {
return self * self
}
}
let number = 3
print(number.squared()) // μΆλ ₯: 9
// 3. μλ‘μ΄ μ΄κΈ°ν(Initializer) μΆκ°
// Double νμ
μ νμ₯νμ¬ νΉμ μ«μλ‘ μ΄κΈ°ννλ μ΄κΈ°ν λ©μλ μΆκ°
extension Double {
init(fromString str: String) {
self = Double(str) ?? 0.0 // selfμ체μ doubleλ‘ νλ³νμ νκ³ μ€ν¨νμ λλ 0.0μ΄ λ€μ΄κ°κ² λ§λ¦.
}
}
let value = Double(fromString: "3.14")
print(value) // μΆλ ₯: 3.14
// 4. νλ‘ν μ½ μ±ν(Protocol Conformance)
protocol Printable {
func printDescription()
}
struct MyStruct {}
// Extensionμ μ¬μ©νμ¬ κΈ°μ‘΄ νμ
μ νλ‘ν μ½ μ±ν
extension MyStruct: Printable {
func printDescription() {
print("Printing description of MyStruct")
}
}
let myInstance = MyStruct()
myInstance.printDescription() // μΆλ ₯: Printing description of MyStruct
// 5. μλΈμ€ν¬λ¦½νΈ μΆκ°(Subscripting)
struct Matrix {
private var data: [[Int]] // μ΄μ€ λ°°μ΄
init(rows: Int, columns: Int) {
data = Array(repeating: Array(repeating: 0, count: columns), count: rows)
}
}
extension Matrix {
// Extensionμ μ¬μ©νμ¬ μλΈμ€ν¬λ¦½νΈ μΆκ°
subscript(row: Int, column: Int) -> Int { // row, columnμ νλΌλ―Έν°λ‘ λ°κ³ Intλ₯Ό 리ν΄ν΄μ€.
get {
return data[row][column] // dataμ μ κ·Όν΄μ λ°μμ΄.
}
set {
data[row][column] = newValue
}
}
}
var matrix = Matrix(rows: 3, columns: 3)
matrix[0, 0] = 1
matrix[1, 1] = 2
print(matrix[0, 0]) // μΆλ ₯: 1
print(matrix[1, 1]) // μΆλ ₯: 2
// 6. μ€μ²© νμ
(Nested Type) μΆκ°
struct Container {
// κΈ°μ‘΄ νμ
λ΄μμ μ€μ²©λ νμ
struct NestedType {
var value: Int
}
}
// Extensionμ μ¬μ©νμ¬ μ€μ²© νμ
μΆκ°
extension Container {
struct AnotherNestedType {
var name: String
}
}
let nested = Container.NestedType(value: 5)
print(nested.value) // μΆλ ₯: 5
let anotherNested = Container.AnotherNestedType(name: "NestedType")
print(anotherNested.name) // μΆλ ₯: NestedType
ExtensionμΌλ‘ ꡬν λΆκ°λ₯ν κ²λ€:
- μ μ₯ νλ‘νΌν°(Stored Property) μΆκ°: ExtensionμΌλ‘λ μ μ₯ νλ‘νΌν°λ₯Ό μΆκ°ν μ μμ΅λλ€. μ€μ§ κ³μ°λ νλ‘νΌν°λ§ μΆκ°ν μ μλ€.
- κΈ°μ‘΄ κΈ°λ₯μ μ¬μ μ(Override): μ΄λ―Έ μ‘΄μ¬νλ κΈ°λ₯μ Extensionμμ μ¬μ μ(Override)ν μ μλ€. μμκ³Ό μ¬μ μλ ν΄λμ€μμλ§ κ°λ₯νλ€.
- μ΄κΈ°ν λ©μλ(Initializer)μ μ¬μ μ: ExtensionμΌλ‘λ μλ‘μ΄ νΈμ μ΄κΈ°ν λ©μλλ₯Ό μΆκ°ν μ μμ§λ§, κΈ°λ³Έ μ΄κΈ°ν λ©μλ λλ μ§μ μ΄κΈ°ν λ©μλλ₯Ό μ¬μ μν μλ μλ€.
- κΈ°μ‘΄ νμ μ μ μ₯λ νλ‘νΌν°μ κΈ°λ³Έκ° μ€μ : Extensionμμλ κΈ°μ‘΄ νμ μ μ μ₯λ νλ‘νΌν°μ κΈ°λ³Έκ°μ μ€μ ν μ μλ€.
// 1. μ μ₯ νλ‘νΌν°(Stored Property) μΆκ°
// ExtensionμΌλ‘ μ μ₯ νλ‘νΌν° μΆκ° μ μ»΄νμΌ μλ¬ λ°μ
extension Int {
var newProperty: Int = 5 // μ»΄νμΌ μλ¬ λ°μ
}
// 2. κΈ°μ‘΄ κΈ°λ₯μ μ¬μ μ(Override)
// ExtensionμΌλ‘ κΈ°μ‘΄ λ©μλ μ¬μ μ μ μ»΄νμΌ μλ¬ λ°μ
extension Int {
func description() -> String { // μ»΄νμΌ μλ¬ λ°μ
return "This is an extension method"
}
}
// 3. μ΄κΈ°ν λ©μλ(Initializer)μ μ¬μ μ
// ExtensionμΌλ‘ κΈ°μ‘΄ νμ
μ μ΄κΈ°ν λ©μλ μ¬μ μ μ μ»΄νμΌ μλ¬ λ°μ
extension String {
init() { // μ»΄νμΌ μλ¬ λ°μ
self = "Default Value"
}
}
// 4. κΈ°μ‘΄ νμ
μ μ μ₯λ νλ‘νΌν°μ κΈ°λ³Έκ° μ€μ
// ExtensionμΌλ‘ κΈ°μ‘΄ νμ
μ μ μ₯λ νλ‘νΌν°μ κΈ°λ³Έκ° μ€μ μ μ»΄νμΌ μλ¬ λ°μ
extension Double {
var defaultValue: Double = 10.0 // μ»΄νμΌ μλ¬ λ°μ
}
'π Today I Learned > Swift λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Combine (0) | 2023.12.15 |
---|---|
[Swift] μ λ€λ¦ (Generic) (0) | 2023.12.13 |
[Swift] νλ‘ν μ½ (0) | 2023.12.13 |
[Swift] ARCμ λ©λͺ¨λ¦¬ λμ (0) | 2023.12.13 |
[Swift] μμΈμ²λ¦¬ (0) | 2023.12.12 |