Daniel Chepenko
Daniel Chepenko

Reputation: 2268

UISwitch is not working properly

I'm trying to implement one simple thing - to switch the string value by switching UISwitch.

But, I can get, what is wrong

        func switchIsChanged(interestedIn: UISwitch) {
            if interestedIn.on == true {
                print("UISwitch is ON")
            } else {
                print("UISwitch is OFF")
            }
        }

        if self.Gender.text == "male" {

            switchIsChanged(self.interestedIn)
  }

I can show the whole code if necessary. I just taking data from Facebook, understand the gender if user, and the set the value interestedIn depending on his or her gender.

import UIKit
import FBSDKShareKit
import FirebaseDatabase
import FirebaseAuth
import Firebase

class Settings: UIViewController {

@IBOutlet weak var UserImage: UIImageView!
@IBOutlet weak var UserName: UILabel!
@IBOutlet weak var UserSurname: UILabel!
@IBOutlet weak var Gender: UILabel!
@IBOutlet weak var interestedIn: UISwitch!
@IBOutlet weak var GenderofInsterest: UILabel!

var pictureURL : String?
var interest = ""

override func viewDidLoad() {
    super.viewDidLoad()


    let paramets = ["fields": "email, first_name, last_name, picture.type(large), gender"]

    let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: paramets)

    graphRequest.startWithCompletionHandler({

        (connection, result, error) -> Void in

        if error != nil {
            print (error)
        }

        if let first_name = result["first_name"] as? String {

            self.UserName.text = first_name

        }

        if let last_name = result["last_name"] as? String {

            self.UserSurname.text = last_name

        }

        if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, pictureUrl = data["url"] as? String {

            self.pictureURL = pictureUrl

            let fbUrl = NSURL(string: pictureUrl)

            if let picData = NSData(contentsOfURL: fbUrl!) {
                self.UserImage.image = UIImage(data: picData)
            }

        }

        if let gender = result["gender"] as? String {

            self.Gender.text = gender

        }


        let people = ProfileClass()

        people.profileName = self.UserName.text
        people.profileGender = self.Gender.text
        people.profileSurname = self.UserSurname.text
        people.profilePhotoUrl = self.pictureURL
        people.SaveUser()


        func switchIsChanged(interestedIn: UISwitch) {
            if interestedIn.on == true {
                print("UISwitch is ON")
            } else {
                print("UISwitch is OFF")
            }
        }



        if self.Gender.text == "male" {

            switchIsChanged(self.interestedIn)

        }


    })



}}

Upvotes: 0

Views: 537

Answers (1)

Alex Kosyakov
Alex Kosyakov

Reputation: 2186

As @ILideTau mentioned above, you should not directly work with UISwitch states, instead of that, just create a Bool variable, that will hold your switch state, and update UI when you change its state in didSet { } closure:

@IBOutlet weak var interestedInSwitch: UISwitch!

var interstedInState: Bool = false {
    didSet {
        interestedInSwitch.on = interstedInState
    }
}
func updateInterstedInState(newValue: Bool) {
  interstedInState = newValue
}

Upvotes: 1

Related Questions