SwiftUI: Как я могу отобразить вывод функции в представлении содержимого

#swift #swiftui

Вопрос:

У меня есть функция, которая вычисляет 2 значения из 4 пользовательских входных данных. и я хочу их показать. Я добавил свои выходные данные в качестве переменных @State.

 import SwiftUI

struct ContentView: View {
    
    @State private var dogruSayisiK = ""
    @State private var yalnisSayisiK = ""
    @State private var dogruSayisiT = ""
    @State private var yalnisSayisiT = ""
    @State private var ortalamaDK = 1
    @State private var ortalamaDT = 1
    @State private var STD: Double = 20
    @State private var isEditing = false
    @State private var temelBP: Double = 0
    @State private var klinikBP: Double = 0
    
    let ortalamaT = [45, 50, 55, 60]
    let ortalamaK = [45, 50, 55, 60]
    //let SD = [17,18,19,20,21,22,23]
    
    
    func puanHesapla() ->(temelBP: Double, klinikBP: Double) {
        
        let yalnisNK = Double(yalnisSayisiK) ?? 0
        let dogruNK = Double(dogruSayisiK) ?? 0
        
        
        let yalnisNT = Double(yalnisSayisiT) ?? 0
        let dogruNT = Double(dogruSayisiT) ?? 0
        
        let toplamNetK = dogruNK - (yalnisNK*0.25)
        let toplamNetT = dogruNT - (yalnisNT*0.25)
        
        let zT = (toplamNetT - Double(ortalamaDT)) / STD
        let T = 50   10 * zT
        
        let zK = (toplamNetK - Double(ortalamaDK)) / STD
        let K = 50   10 * zK
        
        let temelBP = 0.7 * T   0.3 * K
        
        let klinikBP = 0.5 * T   0.5 * K
        return (temelBP, klinikBP)
    }
    
    
    var body: some View {
        Form {
            
            Section(header: Text("Standard Dev.")) {
                HStack{
                    Text("17")
                    Slider(value: $STD, in: 17...23, step: 1, onEditingChanged: { editing in  isEditing = editing})
                    Text("20")
                }
                Text("(STD, specifier: "%.1f")  ")
                    .frame(maxWidth: .infinity, alignment: .center)
                    .foregroundColor(isEditing ? .red : .blue)
            }
            
            Section( header: Text("Klinik Bilimler") ){
                VStack(alignment: .leading) {
                    HStack(spacing: 10) {
                        Text("Klinik Dogru Sayisi")
                            .foregroundColor(.blue)
                        TextField("Dogru Sayisi", text: $dogruSayisiK)
                            .keyboardType(.numberPad)
                    }
                    HStack(spacing: 10) {
                        Text("Klinik Yalnis Sayisi")
                            .foregroundColor(.red)
                        TextField("Yalnis Sayisi", text: $yalnisSayisiK)
                            .keyboardType(.numberPad)
                    }
                    Picker("Sinav Ortalamasi", selection: $ortalamaDK) {
                        ForEach(0 ..< ortalamaK.count) {
                            Text("(self.ortalamaK[$0])%")
                                .pickerStyle(SegmentedPickerStyle())
                        }
                    }
                }
                .pickerStyle(SegmentedPickerStyle())
            }
            
            Section(header: Text("Temel Bilimler") ) {
                VStack (alignment: .leading) {
                    HStack(spacing: 10) {
                        Text("Temel Bilim Dogru Sayisi")
                            .foregroundColor(.blue)
                        TextField("Dogru Sayisi", text: $dogruSayisiT)
                            .keyboardType(.numberPad)
                    }
                    
                    HStack(spacing: 10) {
                        Text("Temel Bilim Yalnis Sayisi")
                            .foregroundColor(.red)
                        TextField("Yalnis Sayisi", text: $yalnisSayisiT)
                            .keyboardType(.numberPad)
                    }
                    
                    Picker("Temel Bilim Ortalama", selection: $ortalamaDT) {
                        ForEach(0 ..< ortalamaT.count) {
                            Text("(self.ortalamaT[$0])%")
                        }
                    }
                }
            
            .pickerStyle(SegmentedPickerStyle())
        }
        
                Button("Hesapla"){
                    puanHesapla()
                    print($klinikBP)
                }
                .background(Color.white)
                .foregroundColor(Color.black)
                .frame(width: 70, height: 70, alignment: .center)
            
             Section(header: Text("Sonuc")){
                 HStack{
                     VStack{
                         Text("Temel Bilim Puan")
                             .foregroundColor(.red)
                         Text("(temelBP, specifier: "%.2f")")
                     }
                     
                     VStack{
                         Text("Klinik Bilim Puan")
                             .foregroundColor(.red)
                         Text("(klinikBP, specifier: "%.2f")")
                     }
                 }
             }
         }
    }
}
 

функция работает, а также кнопка.Добавлена строка кода в мою функцию print(temelBP) , и она печатается, когда я нажимаю на свою функцию. Как я могу отобразить значения в последнем разделе моего представления содержимого, Тексты.

Ответ №1:

Установите значение klinikBP var.

 Button("Hesapla"){
    let hesapla = puanHesapla()
    klinikBP = hesapla.klinikBP
    temelBP = hesapla.temelBP
    print(klinikBP)
    print(temelBP)
}
 

Примечание: Не требуется $ знак для печати значения.