SwiftUI Picker, преобразовывающий строку в двойную - PullRequest
0 голосов
/ 10 июля 2019

Я играю со SwiftUI, и у меня есть средство выбора, выбирающее несколько строк в массиве, которые являются числами. Средство выбора работает хорошо, и я могу отображать значение на экране, однако мне нужно иметь возможность установить выбранную строку измассив до двойника.

Я уверен, что есть некоторые очень добрые и умные люди, которые могут мне помочь ..

Я бы хотел установить:

var totalFrequency: Double = 0.0

из двух значений из сборщика.

Спасибо !!!

Крейг

import SwiftUI

struct DipoleSelect : View {
  @State var mhzValueIndex = 0
  @State var mhzValueStepIndex = 0
  var frequencyValue = ["1", "2", "3", "4", "5", "6", "7", "8", "9" ]
  var frequencyStep = [".000", ".005", ".010"]
  var totalFrequency : Double = 0.0

  var body: some View {

    VStack {

      Text("Select Frequency")
        .font(.largeTitle)
        .fontWeight(.heavy)
        .padding([.top,], -180.0)

      Picker(selection: $mhzValueIndex, label: Text("")) {
        ForEach(0 ..< frequencyValue.count) {
          Text(self.frequencyValue[$0] + " mhz").font(.largeTitle).fontWeight(.semibold).color(Color.black).tag($0)
        }.font(.title)

      }.padding(.top, -170)

      Picker(selection: $mhzValueStepIndex, label: Text("")) {
        ForEach(0 ..< frequencyStep.count) {
          Text(self.frequencyStep[$0]).tag($0)
        }

      }.padding()

      Text("You Selected \(frequencyValue[mhzValueIndex])\(frequencyStep[mhzValueStepIndex]) Mhz")

    }

  }

}

1 Ответ

0 голосов
/ 10 июля 2019

Я придумал это решение.Надеюсь, это сработает для вас.

final class Property: BindableObject {
    var didChange = PassthroughSubject<Property, Never>()

    var frequencyValue = ["1", "2", "3", "4", "5", "6", "7", "8", "9" ]
    var frequencyStep = [".000", ".005", ".010"]

    var mhzValueIndex: Int = 0 {
        didSet{
            totalFrequency = totalFrequency + getDouble(value: frequencyValue[mhzValueIndex])
            didChange.send(self)

        }
    }

    var mhzValueStepIndex: Int = 0 {
        didSet {
            totalFrequency = totalFrequency + getDouble(value: frequencyStep[mhzValueStepIndex])
            didChange.send(self)
        }
    }

    var totalFrequency: Double = 0.0 {
        didSet{
            didChange.send(self)
        }
    }

    func getDouble(value: String) -> Double {
        return  Double(value)!
    }
}

struct DipoleSelect : View {

    @EnvironmentObject var property: Property

    var body: some View {

        VStack {

            Text("Select Frequency")
            .font(.largeTitle)
            .fontWeight(.heavy)
            .padding()

            Picker(selection: $property.mhzValueIndex, label: Text("")) {
                ForEach(0 ..< property.frequencyValue.count) {
                    Text(self.property.frequencyValue[$0] + " mhz").font(.largeTitle).fontWeight(.semibold).color(Color.black).tag($0)
                }.font(.title)

            }

            Picker(selection: $property.mhzValueStepIndex, label: Text("")) {
                ForEach(0 ..< property.frequencyStep.count) {
                    Text(self.property.frequencyStep[$0]).tag($0)
                }

            }


            Text("You Selected \(property.frequencyValue[property.mhzValueIndex])\(property.frequencyStep[property.mhzValueStepIndex]) Mhz")


            Text("Total frequency: \(property.totalFrequency)")

       }

    }


}
...