• Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

ViewModifier

같은 설정들을 여러 번 써야 할 때, 같은 코드들의 반복의 최소화를 지원해주는 기능

ViewModifier 만들기

struct MyTextStyle: ViewModifier {
  func body(content: Content) -> some View {
    content
    	.font(.title2)
    	.foregroundColor(.orange)
      .padding(.bottom, 20)
  }
}

.italic 같이 공통으로 적용하려면 안된다고 뜨는 것들이 몇 개 있는데,
나중에 수정될 것 같긴 하지만 우선 빼서 사용하는 방법이 있고,
같이 쓰는 방법은 밑에 따로 작성

struct MyTextStyle: ViewModifier {
  var myWeight = Font.Weight.regular
  var myFont = Font.title2
  var myColor - Color.black
  
  func body(content: Content) -> some View {
    content
    	.font(myFont.weight(myWeight)) //이렇게도 가능
    	.foregroundColor(myColor)
      .padding(.bottom, 20)
  }
}

ViewModifier 사용하기

Text("blah blah")
	.modifier(MyTextStyle(myWeight:.bold))
	// ()안에 myWeight:.bold 이런건 넣어줘도 되고 default값으로 쓸거면 안 넣어줘도 되고
Text("hello!")
	.modifier(MyTextStyle(myColor: .red))
Text("another one")
	.modifier(MyTextStyle())

그래서 italic같은 건 어떻게 쓰죠?

기능을 확장하는 extension 개념으로 생각해봅시다

extension Text {
  func customFont() -> Text {
    self
    	.font(.title2) //위 ViewModifier 할때랑 같은 개념
    	.bold()
    	.italic()
    	.foregroundColor(.blue)
  }
}
Text("this is...")
	.customFont()

extension으로 하면 ViewModifier 처럼 변수를 만들어서 초기값을 지정하고
나중에 바꿔서 쓸 수 있고.. 하는 그런 게 안됨

Color같은 걸 받으려면

extension Text{
  func customFont(color: Color) -> Text {
    self
    	.font(.title2)
    	.bold()
    	.italic()
    	.foregroundColor(color)
  }
}
Text("Color text")
	.customFont(color: .red)

이런식으로 해야겠죠!