我的 UIswitch 值是零,即使它打开我也必须关闭然后再打开才能设置值

my UIswitch value is nil even when its on I have to turn swich off and then back on for it to set value

使用UIswitch设置值 我的变量是静态的,因为我在不同的 swift 文件中使用它们 所以当我 运行 程序并单击注册按钮时它打印 nil 即使它打开(按钮保持关闭应用程序时的状态) 我必须切换它然后单击注册按钮才能打印可选(真) 我该怎么做才能让用户不必在每次打开应用程序时或在应用程序打开但值为 nil 时显示 我也只是想让它打印 true/false (我如何解包)

class FirstViewController: UIViewController, UITextFieldDelegate {
    static var FirstColor: Bool!

    @IBAction func home(_ sender: RoundButton) {
    }
    @IBAction func Registration(_ sender: RoundButton) {
        print(FirstViewController.FirstColor)
    }

    @IBAction func ColorSwitch(_ sender: UISwitch) {
        if sender.isOn{
            FirstViewController.FirstColor = true
        }else{FirstViewController.FirstColor = false }
    }
}

如果您想保留开关状态,您需要将其存储在 UserDefaults 中。不要在 FirstViewController 中添加静态 属性。使用计算的 属性

创建单独的 class
class Color {
    static var firstColor: Bool {
        get { return UserDefaults.standard.bool(forKey: "firstColor") }
        set { UserDefaults.standard.set(newValue, forKey: "firstColor") }
    }
}

在 FirstViewController 的 viewDidLoad 中获取最后状态并更新

override func viewDidLoad() {
    super.viewDidLoad()
    mySwitch.isOn = Color.firstColor
}

在 Switch 的 action 中更改它

@IBAction func ColorSwitch(_ sender: UISwitch) {
    sender.isOn = !sender.isOn
    Color.firstColor = sender.isOn
}

您可以尝试直接使用 isOn 属性 的值。这有帮助吗?另外,我建议您为处理程序使用更好的名称。

class FirstViewController: UIViewController, UITextFieldDelegate
{
    static var FirstColor: Bool!

    @IBAction func registrationTapped(_ sender: RoundButton)
    {
        print(FirstViewController.FirstColor)
    }

    @IBAction func colorChanged(_ sender: UISwitch)
    {
        FirstViewController.FirstColor = sender.isOn
    }
}