์๋ ํ์ธ์~
์ค๋์ Extension์ ๋ํด์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค : )
Extension ์ด๋?
Swift์ extension์ ๊ธฐ์กด์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ฑ์ ํ์ ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ด๋ฅผ ํตํด ๊ธฐ์กด์ ํ์ ์ ํ์ฅํ๊ฑฐ๋, ํ๋กํ ์ฝ ์ ์ฉ ๋ฑ์ ํตํด ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋ฌธ๋ฒ
extension์ ์ฌ์ฉํ์ฌ ํ์ ์ ํ์ฅํ๋ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
extension ํ์ฅํ ํ์
{
// ๊ธฐ๋ฅ ๊ตฌํ
}
์ ๋ฌธ๋ฒ์์ ํ์ฅํ ํ์ ์
๊ธฐ์กด์ ์ ์๋ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ฑ์ ํ์ ์ ์๋ฏธํฉ๋๋ค.
๊ธฐ๋ฅ ๊ตฌํ์๋ ๊ธฐ์กด ํ์ ์ ์ถ๊ฐ๋ ํ๋กํผํฐ, ๋ฉ์๋, ์๋ธ์คํฌ๋ฆฝํธ ๋ฑ์ ๋ฉค๋ฒ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Int ํ์ ์ isEven์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด extension์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
extension Int {
var isEven: Bool {
return self % 2 == 0
}
}
์ ์ฝ๋์์
์์ ๋ฌธ๋ฒ์์ ์ค๋ช ํ๋
ํ์ฅํ ํ์ ์ Int๊ฐ ๋๋ ๊ฒ์ด๊ณ isEven์ด๋ผ๋ ์๋ก์ด ํ๋กํผํฐ๊ฐ ๊ธฐ๋ฅ๊ตฌํ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
Int ํ์ ์ ์ธ์คํด์ค์์ isEven ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
let number = 10
print(number.isEven) // true
ํ๋กํ ์ฝ ์ ์ฉ
extension์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํ์ ์ ์๋ก์ด ํ๋กํ ์ฝ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ธฐ์กด ํ์ ์ด ์๋ก์ด ํ๋กํ ์ฝ์ ์ค์ํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, CustomStringConvertible ํ๋กํ ์ฝ์ ์ ์ฉํ์ฌ
Person์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ์ ์๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
struct Person {
let name: String
let age: Int
}
extension Person: CustomStringConvertible {
var description: String {
return "\(name)(์/๋) \(age)์ด์
๋๋ค."
}
}
Person ๊ตฌ์กฐ์ฒด์ CustomStringConvertible ํ๋กํ ์ฝ์ ์ ์ฉํ๊ณ
description ํ๋กํผํฐ๋ฅผ ๊ตฌํํ์ฌ ๋ฌธ์์ด๋ก ๋ณํํ ์ ์๋๋ก ๋ง๋ค์์ต๋๋ค.
์ด์ Person ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ฅผ print ํจ์์ ์ ๋ฌํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
let person = Person(name: "๊ฒฝํธ", age: 20)
print(person) // ๊ฒฝํธ(์/๋) 20์ด์
๋๋ค.
์ ๋ค๋ฆญ ํ์ ํ์ฅ
extension์ ์ฌ์ฉํ์ฌ ์ ๋ค๋ฆญ ํ์ ์ ๋ํด์๋ ํ์ฅํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Array ํ์ ์ lastIndex(of:) ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด extension์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
extension Array where Element: Equatable {
func lastIndex(of element: Element) -> Int? {
for (index, item) in self.enumerated().reversed() {
if item == element {
return index
}
}
return nil
}
}
์ ์ฝ๋์์๋ Array ํ์ ์ where ์ ์ ์ฌ์ฉํ์ฌ Element๊ฐ Equatable ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฒฝ์ฐ์๋ง
lastIndex(of:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ ํํ์ต๋๋ค.
Array ํ์ ์ ์ธ์คํด์ค์์ lastIndex(of:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
let numbers = [1, 3, 5, 3, 7, 9, 3]
print(numbers.lastIndex(of: 3)) // Optional(6)
์ด๊ธฐํ ๊ตฌ๋ฌธ ์ถ๊ฐ
extension์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ธฐ์กด ํ์ ์ ๋ค์ํ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Date ํ์ ์ String ๊ฐ์ ์ ๋ ฅ๋ฐ์
Date ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ง๋ค์ด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
extension Date {
init?(fromString dateString: String, format: String = "yyyy-MM-dd") {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
if let date = dateFormatter.date(from: dateString) {
self = date
} else {
return nil
}
}
}
extension์ ์ฌ์ฉํ์ฌ Date ํ์ ์ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์๊ณ
String ๊ฐ๊ณผ format ๊ฐ์ ์ ๋ ฅ๋ฐ์ Date ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉฐ, ์ด๊ธฐํ์ ์คํจํ ๊ฒฝ์ฐ nil์ ๋ฐํ๊ฒ ๋ง๋ค์์ต๋๋ค.
Date ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ fromString ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
let dateString = "2022-04-01"
if let date = Date(fromString: dateString) {
print(date) // 2022-04-01 00:00:00 +0000
}
if let date = Date(fromString: dateString, format: "yyyy/MM/dd") {
print(date) // 2022-04-01 00:00:00 +0000
}
์ค๋์ ์ฌ๊ธฐ๊น์ง ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์๋ชป๋ Coordinator ์ฌ์ฉ ๊ทธ๋ฆฌ๊ณ ๋ฆฌํฉํ ๋ง (0) | 2024.01.16 |
---|---|
[iOS] UITableView์์ ์ ์ค์ฒ ์ฌ์ฉํ๊ธฐ / ์ด์์ ๋ฆฌ (1) | 2023.07.20 |
[Swift] Property(ํ๋กํผํฐ)์ ๋ํด์ ์์๋ณด์. (0) | 2023.04.08 |
[Swift] Class์ Struct์ ๋ํด์ (0) | 2023.04.07 |
[Swift] Delegate Pattern(๋๋ฆฌ๊ฒ์ดํธ ํจํด)์ ๋ํด์ (0) | 2023.04.04 |