How to link a boolean value to the on/off state of a UISwitch?

ios, swift

Solution

Add the UISwitch Reference into ViewController.swift file.

@IBOutlet var mySwitch: UISwitch 
@IBOutlet var switchState: UILabel

then add the target event into the viewdidload method like below

mySwitch.addTarget(self, action: #selector(ViewController.switchIsChanged(_:)), forControlEvents: UIControlEvents.ValueChanged)

When the switch is flipped the UIControlEventValueChanged event is triggered and the stateChanged method will be called.

func switchIsChanged(mySwitch: UISwitch) {
    if mySwitch.on {
        switchState.text = "UISwitch is ON"
    } else {
        switchState.text = "UISwitch is OFF"
    }
}

Swift 3.0

func switchIsChanged(mySwitch: UISwitch) {
    if mySwitch.isOn {
        switchState.text = "UISwitch is ON"
    } else {
        switchState.text = "UISwitch is OFF"
    }
}

Swift 4.0

@objc func switchIsChanged(mySwitch: UISwitch) {
    if mySwitch.isOn {
        switchState.text = "UISwitch is ON"
    } else {
        switchState.text = "UISwitch is OFF"
    }
}

find brief tutorial in https://sourcefreeze.com/uiswitch-tutorial-using-swift-in-ios8/

Problem

I have a `UISwitch` that I want to control a boolean value in a function I wrote. I looked in the `UISwitch` Type Reference and it listed the property for the on/off state of the switch as `on`. I tried to use this in a action: ``` @IBAction func switchValueChanged(sender: UISwitch) { if acsessabilitySwitch.on { //accessibilitySwitch is the UISwitch in question println("It's True!") advice.isInProduction = Bool (true) // isInProduction is a attribute of a class } else { println("It's False!") advice.isInProduction = Bool (false) } ``` but when I ran it and hit the switch it crashed and didn't print anything. EDIT: Here is my ViewController and my custom class files: BuyingAdviceModel.swift: ``` import Foundation class videoGameModel{ var price : Double var isInProduction : Bool var adviceGiven: String? init (isInProduction : Bool, price: Double){ self.price = price self.isInProduction = isInProduction } func giveAdvice (price:Double, isInProduction:Bool)->(adviceGiven:String){ if price >= 199.99 { var adviceGiven = "Nope, that's too expensive!" return adviceGiven } else if price <= 99.99{ if isInProduction == true { var adviceGiven = ("Buy it at GameStop!") return adviceGiven } else { var adviceGiven = ("Go look online!") return adviceGiven } } else { var adviceGiven = ("Are you sure you put the info in correctly?") return adviceGiven } } } ``` ViewController.swift: ``` import UIKit import Foundation class ViewController: UIViewController { @IBOutlet var priceTextField: UITextField @IBAction func adviceButtonTapped(sender: AnyObject) { let adviceOutputed = advice.adviceGiven! adviceLabel.text=adviceOutputed } @IBAction func viewTapped(sender: AnyObject) { priceTextField.resignFirstResponder() } @IBOutlet var acsessabilitySwitch: UISwitch @IBOutlet var adviceLabel: UILabel @IBAction func switchValueChanged (sender: UISwitch) { advice.isInProduction = sender.on println ("It's " + advice.isInProduction.description + "!") } var advice = videoGameModel (isInProduction: true,price: 0.00) func refreshUI(){ priceTextField.text = String(advice.price) adviceLabel.text = "" } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. refreshUI() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } ```

Original source