extensionμ κΈ°μ‘΄ νμ
μ κΈ°λ₯μ μΆκ°νλ€. μ¬κΈ°μ κΈ°μ‘΄μ νμ
μ ꡬ쑰체, μ΄κ±°ν, ν΄λμ€λ₯Ό λ§νλ€. νμ₯μ νμ
μ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μλ μμ§λ§, κΈ°μ‘΄μ μ‘΄μ¬νλ κΈ°λ₯μ μ¬μ μν μλ μλ€! κ·Έλ λ€κ³ κΈ°λ₯μ μΆκ°νκΈ° μν΄ νμ
μ ꡬνλ λͺ¨λ μμ€μ½λλ₯Ό μ μλ μλ€. extensionμ νμ
λ§ μκ³ μλ€λ©΄ κ·Έ νμ
μ κΈ°λ₯μ νμ₯ν μ μλλ‘ ν΄μ€λ€.
extension ν€μλλ₯Ό μ¬μ©νμ¬ νμ₯μ μ μΈνλ€.
extension SomeType {
}
struct Person {
let name: String
var country: String
let isMale: Bool
}
extension Person {
let age: Int
let bloodType: String
var height: Float
}
νμ₯μΌλ‘ κΈ°μ‘΄μ μ‘΄μ¬νλ νμ μ΄ νλ‘ν μ½μ μ±νν μ μλ€. μ΄λ νλ‘ν μ½μ λ€μ€ μ±νν μ μλ€.
extension SomeType: SomeProtocol, AnotherProtocol {
}
extension ꡬ문μΌλ‘λ λ€μν κ²λ€μ΄ κ°λ₯νλ€. κΈ°μ‘΄ νμ
μ μλ‘μ΄ μ°μ° νλ‘νΌν°(computed property)λ₯Ό μΆκ°, μλ‘μ΄ μΈμ€ν΄μ€/νμ
λ©μλ μΆκ°, μ΄κΈ°ν ꡬ문 μΆκ°, νλ‘ν μ½ μ±ν, μλΈμ€ν¬λ¦½νΈ μΆκ°, μ€μ²©νμ
μΆκ°κ° κ°λ₯νλ€.
νμ₯μ κΈ°μ‘΄ νμ μ νμ μ°μ° νλ‘νΌν°μ μΈμ€ν΄μ€ μ°μ° νλ‘νΌν°λ₯Ό μΆκ°ν μ μλ€. μ°μ° νλ‘νΌν°λΌκ³ νΉλ³ν μ§μ νκ² μ²λΌ μ μ₯ νλ‘νΌν°λ μΆκ°κ° λΆκ°λ₯νλ€. λν κΈ°μ‘΄ νμ μ μ μ₯λ νλ‘νΌν°μ κΈ°λ³Έκ° μ€μ μ μ»΄νμΌ μλ¬κ° λ°μνλ€.
extension String {
var lastTwoWord: String {
let suffixString = self.suffix(2)
return String(suffixString)
}
}
let str = "Hello"
print(str.lastTwoWord) //"lo"
μ μ½λλ String νμ
μ λν΄ μ°μ° νλ‘νΌν°λ₯Ό μΆκ°νμλ€. String νμ
μ μΈμ€ν΄μ€μ λ§μ§λ§ λ κΈμλ₯Ό λ°νν΄μ£Όλ μ°μ° νλ‘νΌν°μ΄λ€. μ΄λ κ² νμ₯ν΄μ£Όλ©΄ λͺ¨λ String νμ
μμ ν΄λΉ νλ‘νΌν°λ₯Ό μ¬μ© κ°λ₯νλ€. μ΄ νλ‘νΌν°λ μ½κΈ°μ μ© μ°μ°νλ‘νΌν°μ΄λ―λ‘ getν€μλ μμ΄ ννμ΄ κ°λ₯νλ€.
π§ μΈμ€ν΄μ€ μ°μ° νλ‘νΌν°μ νμ μ°μ° νλ‘νΌν° : swiftμμ νλ‘νΌν°λ₯Ό μ μνλ λκ°μ§ λ°©λ²μ΄λ€.
- νμ μ°μ° νλ‘νΌν°λ νμ μ체μ κ΄λ ¨μ΄ μλ κ°μ λνλ΄λ©°
staticν€μλλ₯Ό μ¬μ©νμ¬ νμ λ΄λΆμ μ μΈνλ€. κ·ΈλΌ ν΄λΉ νμ μ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νκ² λλ€.- μΈμ€ν΄μ€ μ°μ° νλ‘νΌν°λ νΉμ μΈμ€ν΄μ€μ κ΄λ ¨μ΄ μλ κ°μ λνλ΄λ©°
varν€μλλ₯Ό μ¬μ©νμ¬ νμ λ΄λΆμ μ μΈλλ€. μΈμ€ν΄μ€κ° μμ±λ λ λ§λ€ κ³ μ ν κ°μ κ°μ§λ€.
extensionμΌλ‘ κΈ°μ‘΄ νμ μ μλ‘μ΄ νΈμ μ΄κΈ°ν ꡬ문μ μΆκ°ν μ μλ€. κ·Έλ¬λ μλ‘μ΄ μ§μ μ΄κΈ°ν ꡬ문μ΄λ μ΄κΈ°ν ν΄μ ꡬ문(λμ΄λμ λΌμ΄μ )μ μΆκ°ν μλ μλ€. μ΄λ€μ νμ κΈ°μ‘΄ ν΄λμ€μ ꡬνλΆμ μμ±λμ΄μΌ νλ€. κ° νμ (ꡬ쑰체,μ΄κ±°ν)μ μκ΄μλ€.
extension Double {
init(fromString str: String) {
self = Double(str) ?? 0.0
}
}
let stringValue = "3.14"
let doubleValue = Double(fromString: stringValue) //3.14
μ΄ μ½λλ Double νμ μ λν νμ₯μ μ μνκ³ μλ€. λ§μ½ μ΄κΈ°ν ꡬ문μΌλ‘ λ°μλ€μΈ λ¬Έμμ΄μ΄ Doubleλ‘ λ³νν μ μλ€λ©΄ ν΄λΉ κ°μΌλ‘ Double μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννκ³ μλλ©΄ 0.0μ μ¬μ©νλ€.
π§ μ§μ μ΄κΈ°νμ νΈμμ΄κΈ°ν : μΈμ€ν΄μ€λ₯Ό μμ±νκ³ κ·Έ μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό μ΄κΈ°ννλ λκ°μ§ μ ν
- μ§μ μ΄κΈ°ν : ν΄λμ€λ ꡬ쑰체μ λͺ¨λ μ μ₯ νλ‘νΌν°λ₯Ό μ΄κΈ°ννλ ꡬ문μΌλ‘ λ°λμ νλ μ΄μμ μ§μ μ΄κΈ°ν κ΅¬λ¬Έμ΄ μμ΄μΌ νλ€! (νν μ΄κΈ°ν ꡬ문μ΄λΌκ³ λΆλ₯΄λ λΈλ‘)
- νΈμμ΄κΈ°ν : μ΄κΈ°ν μμ μ λ νΈλ¦¬νκ² λ§λ€κΈ° μν΄ μ§μ μ΄κΈ°νλ₯Ό κ°λ¨νκ² νΈμΆν μ μλ 보쑰 μ΄κΈ°ν μμ μ λ΄λΉνλ ꡬ문μΌλ‘ μμ±νμ§ μμλ λλ€.
convenienceν€μλλ₯Ό μ¬μ©νλ€. λ³΄ν΅ λ§€κ°λ³μμ μΌλΆ λ§μ λ°μ μ§μ μ΄κΈ°νλ₯Ό νΈμΆνλ λ°©μμΌλ‘ λμνλ€.convenience init(name: String) { self.init(name: name, age: 0) }
extensionμΌλ‘ κΈ°μ‘΄ νμ μ μλ‘μ΄ μΈμ€ν΄μ€ λ©μλμ νμ λ©μλλ₯Ό μΆκ°ν μ μλ€.
extension Int {
func repetitions(task: () -> Void) {
for _ in 0..<self {
task()
}
}
}
3.repetitions{
print("hello")
}
//hello
//hello
//hello
μμ μ½λλ Intνμ
μΌλ‘ repetitionμ΄λΌλ μλ‘μ΄ μΈμ€ν΄μ€ λ©μλλ₯Ό μΆκ°ν μμμ΄λ€. μ΄ λ©μλλ νλΌλ―Έν°κ° μκ³ λ°νκ°μ΄ μλ ν¨μνμ
μ μΈμλ‘ κ°μ§λ€.
self λλ νλ‘νΌν°λ₯Ό λ³κ²½νλ ꡬ쑰체μ μ΄κ±°ν λ©μλλ κΈ°μ‘΄μ λ³κ²½ λ©μλμ κ°μ΄ mutating μΌλ‘ μΈμ€ν΄μ€ λ©μλλ₯Ό νμν΄μΌ νλ€. μλμ μμλ μλ μ 곡λλ λ©μλμΈ squareλΌλ λ©μλλ₯Ό μΆκ°λ‘ λ³κ²½νλ μ½λμ΄λ€.
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square() //someInt = 9
extensionμΌλ‘ κΈ°μ‘΄ νμ μ μλ‘μ΄ μλΈμ€ν¬λ¦½νΈλ₯Ό μΆκ°ν μ μλ€.
struct Matrix {
private var data: [[Int]]
init(rows: Int, columns: Int) {
data = Array(repeating: Array(repeating: 0, count: columns), count: rows)
}
}
extension Matrix {
subscript(row: Int, column: Int) -> Int {
get {
return data[row][column]
}
set {
data[row][column] = newValue
}
}
}
var matrix = Matrix(rows: 5, columns: 5)
matrix[0, 0] = 1
matrix[1, 1] = 3
print(matrix)
//Matrix(data: [[1, 0, 0, 0, 0], [0, 3, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
extensionμ μ΄μ©ν΄μ νλ‘ν μ½μ μ±ννμ¬ νλ‘ν μ½μ κΈ°λ³Έκ°μ μ€μ ν΄μ€ μ μλ€. νλ‘ν μ½μ νμ λ§λλ μ½λλ‘ μ€μ λ‘ κΈ°λ₯μ΄ κ΅¬νλμ§ μμ νλ‘νΌν°μ λ©μλλ₯Ό μμ±νμλ€. extensionμ μ΄μ©ν΄μ νλ‘ν μ½μ κΈ°λ₯μ ꡬνν μ μλ€.
protocol Printable {
func printDescription()
}
extension Printable {
func printDescription(){
print("printing...")
}
}
struct MyPrint: Printable{}
let myprinter = MyPrint()
myprinter.printDescription() //printing...