Ios 选择后如何使用选择器获取一些值?

Ios 选择后如何使用选择器获取一些值?,ios,swift,xcode,swiftui,swiftui-picker,Ios,Swift,Xcode,Swiftui,Swiftui Picker,我有一个选择器,它从元组列表中读取数据,并有一些关于如何使其工作的问题。我想做的是,选择器显示一些字符串,当用户进行选择时,与字符串对应的值将保存到变量中。然后我想在函数中使用这个变量来计算一些东西,并将计算结果打印给用户。我目前有: @State private var rating: Int = 0 func scale(rating: Float, someValue1: Float, someValue2: Float) -> Float{ return (rating

我有一个选择器,它从元组列表中读取数据,并有一些关于如何使其工作的问题。我想做的是,选择器显示一些字符串,当用户进行选择时,与字符串对应的值将保存到变量中。然后我想在函数中使用这个变量来计算一些东西,并将计算结果打印给用户。我目前有:

@State private var rating: Int = 0

func scale(rating: Float, someValue1: Float, someValue2: Float) -> Float{
    return (rating + someValue1 * 2.5 + someValue2 * 1.5) / 10
}

var arrayOfTuples: [(score: String, value: Int)] = [
        (score: "A+", value: 60),
        (score: "A", value: 55),
        (score: "A-", value: 50),
        (score: "B+", value: 45),
        (score: "B", value: 40),
        (score: "B-", value: 35),
        (score: "C+", value: 30),
        (score: "C", value: 25),
        (score: "C-", value: 20),
        (score: "D+", value: 15),
        (score: "D", value: 10),
        (score: "D-", value: 5),
        (score: "F", value: 0)
    ]

Picker(selection: $rating, label: Text("Choose")) {
                        ForEach(0 ..< arrayOfTuples.count) {
                            Text(self.arrayOfTuples[$0].score)
                        }
                    }
此外,所有这些都是在Xcode中创建应用程序时创建的ContentView结构中完成的,因此我不知道是否在声明和定义函数,如果有更好的方法,请告诉我

此外,选择器是默认选择器。我更喜欢使用轮式捡拾器,但是当我使用它时,它会显示在主屏幕上,我更喜欢只有当用户按下选择按钮时,它才会弹出

最后,正如您在按钮中看到的,操作正在打印值。但是,我不想打印该值,而是通过弹出框或用户可以看到的其他地方将其显示给用户


有什么办法吗?提前非常感谢您。

要完成所有要求,您需要做很多事情,但让我们从picker view的基础知识开始。您需要遵守Picker View数据源和委托协议,然后实现Picker View所需的方法。下面是一个例子:

class PickerViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    
//...rating and tuple variables

overide func viewDidLoad() {
   let pickerView = UIPickerView()
   pickerView.dataSource = self
   pickerView.delegate = self
   self.view.addSubview(pickerView)
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return arrayOfTuples.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return arrayOfTuples[row].score
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    rating = arrayOfTuples[row].value
}

}

在评级变量中存储选择器值的关键是didSelectRow方法。我编写的代码示例只是采用了一个普通的选择器视图,并将其添加到视图控制器的视图中,而没有考虑放置、约束或其他任何内容,因此它并不漂亮,但它演示了如何使用选择器视图来选择数据。如果希望弹出并隐藏选择器视图,有几种方法可以做到这一点,包括将子视图添加到其他视图的顶部,将其从其超级视图中删除,或显示新的视图控制器。你在Swift上有多熟悉?

我对C++和Python很有经验,但对SWIFT一无所知,这就是我为什么挣扎的原因。您在那里定义的类(PickerViewController),我应该在哪里编写它?在ContentView.swift中?AppDelegate文件?SceneDelegate文件?我不确定所有的东西都到哪里去了,所以我只是在ContentView中做所有的事情。在线资源也很难找到,因为它不能解释我要找的是什么,而且很难理解,因为几乎没有快速的经验。@SantiagoMedina-不用担心,它可以很快吸收,特别是来自其他语言。PickViewController只是视图控制器子类的一个任意示例,我猜您已经有了一个ViewController,它可能是您的ContentView,因此您可以将代码(而不是类声明)复制到ContentView swift文件中并进行尝试。现在不要担心AppDelegate或SceneDelegate文件,您只需要关注单个视图控制器及其视图/子视图,直到熟悉该排列。
class PickerViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    
//...rating and tuple variables

overide func viewDidLoad() {
   let pickerView = UIPickerView()
   pickerView.dataSource = self
   pickerView.delegate = self
   self.view.addSubview(pickerView)
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return arrayOfTuples.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return arrayOfTuples[row].score
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    rating = arrayOfTuples[row].value
}

}