UIPickerView 无需 segue 发送数据

UIPickerView sending data without segue

我正在做一个项目,通过你写下所有科目的成绩来计算你上学所需的分数。

我使用这个 UIPickerView 来让用户告诉程序它的等级是多少。然后我将它保存在一个变量中。但是我不能在没有 segue 的情况下将该变量发送到另一个 viewcontroller,我想避免使用 segue。我该如何进行?

这是我的 Viewcontroller 一门学科:

(部分为瑞典语)

import UIKit

class Q_A_Religion: UIViewController, UIPickerViewDataSource,  UIPickerViewDelegate {


@IBOutlet weak var label: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var picker: UIPickerView!


let A: Double = 20.0
let B: Double = 17.5
let C: Double = 15.0
let D: Double = 12.5
let E: Double = 10.0
let F: Double = 0.0



var totaltmeritvärdeIReligion: Double = 0
 //förvarar värdet av betyget som man skrivit in

let betygsAltenativ = [" ","A", "B", "C", "D", "E", "F", "-"]


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

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

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

public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{

    let BetygValt = betygsAltenativ[row]
    label.text = betygsAltenativ[row]


    switch (BetygValt)

    {


    case " ":
        label2.text = (" ")
        break


    case "A":
        label2.text = ("+ 20p")
        totaltmeritvärdeIReligion = Double(A)

    case "B":
        label2.text = ("+ 17.5p")
        totaltmeritvärdeIReligion = Double(B)
    case "C":
        label2.text = ("+ 15p")
        totaltmeritvärdeIReligion = Double(C)

    case "D":
        label2.text = ("+ 12.5p")
        totaltmeritvärdeIReligion = Double(D)

    case "E":
        label2.text = ("+ 10p")
        totaltmeritvärdeIReligion = Double(E)

    case "F":
        label2.text = ("+ 0p")
        totaltmeritvärdeIReligion = Double(F)

    case "-":
        label2.text = ("+ 0p")


    default:
        print("Inget betyg valt")

    }//switch slutar

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let nextVC: Totaltmeritva_rde = segue.destination as! Totaltmeritva_rde

        nextVC.Religionbetygetskickat = totaltmeritvärdeIReligion

    }

}// func pickerView slutar



}//Slutet av allt

使用 segues 有什么问题?这是针对 parent-child 关系的首选方法。其他方法有:

  1. 使用 NotificationCenter.default
  2. 广播通知
  3. 使用共享数据存储或单例来存放值 (Realm for instance)
  4. 如果您在没有 segue 的情况下手动实例化 VC,则在创建数据之后但在将其推送到堆栈或使其成为根视图控制器之前传入数据。