Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
SwiftUI/SwiftUI(Basic)

40. [SwiftUI] Slider() 슬라이더, CVarARG

by Toughie 2023. 5. 1.

슬라이드를 통해 값을 변경할 수 있는 슬라이더에 대해 알아보자.

//  Created by Toughie on 2023/05/01.
//

import SwiftUI

struct SliderPrac: View {
    
    @State var sliderValue: Double = 3
    @State var textColor: Color = .green
    
    var body: some View {
        VStack {
            Text("평점: ")
                .font(.title2)
            //            Text("\(sliderValue)")
            if sliderValue == 5 {
            //String(format: String, CVarArg) 활용 소수점 한자리까지 표현
                Text(String(format: "%.1f", sliderValue) + "⭐️")
                    .foregroundColor(Color.yellow)
                    .font(.title2)
            } else {
                Text(String(format: "%.1f", sliderValue))
                    .foregroundColor(textColor)
                    .font(.title2)
            }
//            Slider(value: $sliderValue)
//            Slider(value: $sliderValue, in: 1...5)
//            Slider(value: $sliderValue, in: 1...10, step: 0.5)
            
            Slider(
            //바인딩
                value: $sliderValue,
                //슬라이더 범위
                in: 1...5,
                //슬라이더 단위
                step: 0.5,
                label: {
                    Text("TITLE")
                },
                //최솟값
                minimumValueLabel: {
                    Text("1")
                        .font(.headline)
                },
                //최댓값 표시
                maximumValueLabel: {
                    Text("5")
                        .font(.headline)
                },
                onEditingChanged: { _ in
                    textColor = .pink
                })
                //.accentColor()가 deprecated되어서 .tint()를 쓰자.
                .tint(.cyan)
        }
        .padding(.horizontal, 50)
    }
}

+ CVarArg

CVarArg는 C 언어의 가변 인자(variadic argument)를 Swift에서 사용할 수 있도록 해주는 프로토콜이다.

C 언어에서 가변 인자는 함수의 인자로 갯수가 일정하지 않은 변수를 받을 때 사용한다.

Swift에서는 가변 인자를 처리하기 위해 "..." 연산자를 사용한다.

func sum(numbers: Int...) -> Int {
    var total = 0
    for number in numbers {
        total += number
    }
    return total
}

let result = sum(numbers: 1, 2, 3, 4, 5) // 15

그러나 C 언어와 호환성을 유지하기 위해, CVarArg 프로토콜을 사용하여 C 언어에서 작성된 함수와 같은 가변 인자를 처리할 수 있다.


CVarArg 프로토콜은 C언어의 printf() 함수와 같은 형식 문자열을 지원한다. 

따라서 CVarArg 프로토콜을 채택한 타입은 

Swift의 문자열 보간(string interpolation) 기능과 같이 형식 문자열을 사용하여 값을 출력하는 기능을 지원할 수 있다.

예를 들어, Int나 Double 타입은 CVarArg 프로토콜을 채택하고 있으므로, 이들 타입을 형식 문자열에 사용하여 값을 출력할 수 있다.

 

[요약] 

CVarArg 프로토콜은
swift에서 문자열 보간(String interpolation)이나 문자열 포맷팅(String formatting)을 위해 필요한 프로토콜.