반응형
안녕하십니까 공부하는 개발자 입니다.
오늘의 포스팅은 extension입니다.
⚙️Extension 형식의 확장
class, struct, enumeration, protocol
멤버의 확장은 가능하지만 기존에 있던 멤버를 overriding하는 것은 불가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
struct Size {
var width = 0.0
var height = 0.0
}
extension Size{
var area: Double{
return width * height
}
}
let s = Size()
s.height //0
s.width //0
s.area //0
|
cs |
⚙️Adding Properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//계산속성만 가능
extension Date{
var year: Int{
let cal = Calendar.current
return cal.component(.year, from: self)
}
var month: Int{
let cal = Calendar.current
return cal.component(.month, from: self)
}
}
let today = Date()
today.year
today.month
extension Double{
var radianValue: Double{
return Double.pi * self / 180.0
}
var degreeValue: Double{
return self * 180.0 / Double.pi
}
}
let dv = 45.0
dv.radianValue
dv.radianValue.degreeValue
|
cs |
⚙️Adding Methods
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
extension Double{
func toFahrenheit() -> Double{
return self * 9 / 5 + 32
}
func toCelsius() -> Double{
return (self - 32) * 5 / 9
}
//-----------인스턴스 메서드 -------------
static func converToFahrenheit(from celsius: Double) -> Double{
return celsius.toFahrenheit()
}
static func converToCelsius(from fahrenheit: Double) -> Double{
return fahrenheit.toFahrenheit()
}
//-----------타입 메서드 -------------
}
let c = 30.0
c.toFahrenheit()
Double.converToFahrenheit(from: 30.0)
extension Date{
func toString(format: String = "yyyyMMdd") -> String{
let privateFormatter = DateFormatter()
privateFormatter.dateFormat = format
return privateFormatter.string(from: self)
}
}
let day = Date()
day.toString()
day.toString(format: "MM.dd.yyyy")
|
cs |
⚙️Adding Initializers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
extension Date{
init?(year: Int, month: Int, day: Int){
let cal = Calendar.current
var comp = DateComponents()
comp.year = year
comp.month = month
comp.day = day
guard let date = cal.date(from: comp) else{
return nil
}
self = date
}
}
Date.init(year: 1993, month: 12, day: 10)
//RGB
extension UIColor{
convenience init(red: Int, green: Int, blue: Int){
self.init(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1.0)
}
}
UIColor.init(red: 0, green: 0, blue: 255)
struct Size{
var width = 0.0
var height = 0.0
// init(value: Double){
// self.width = value
// self.height = value
// }
}
extension Size{
init(value: Double){
self.width = value
self.height = value
}
}
Size()
Size(width: 12, height: 34)
|
cs |
⚙️Adding SubScripts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
extension String{
subscript(idx: Int) -> String?{
guard (0..<count).contains(idx)else{
return nil
}
let target = index(startIndex, offsetBy: idx)
return String(self[target])
}
}
let str = "Swift"
str[1]
str[100]
extension Date{
subscript(componet: Calendar.Component) -> Int?{
let cal = Calendar.current
return cal.component(componet, from: self)
}
}
let today = Date()
today[.year]
today[.month]
today[.day]
|
cs |
반응형
'Ios > Swift' 카테고리의 다른 글
[Swift] Protocol_2 스위프트 프로토콜 (0) | 2022.08.05 |
---|---|
[Swift] Protocol_1 스위프트 프로토콜 (0) | 2022.08.04 |
[Swift] Initializer_3 스위프트 생성자 3 (0) | 2022.08.01 |
[Swift] Initializers_2 스위프트 생성자 2 (0) | 2022.07.31 |
[Swift] Initializers 스위프트 생성자 (0) | 2022.07.25 |