无法从不同的VC Swift获得切换值

时间:2018-05-25 15:02:14

标签: swift null switch-statement

我想使用下面的代码访问开关值。我没有价值。从第二个View控制器,我得到设置值,根据值显示内容 - englishRef。

SetConViewController是我想要获取我的值的设置视图控制器。

let languageSettingsRef = SetConvViewController()
var englishRef = ""
// Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
if languageSettingsRef.swithEnglish.isOn{
    englishRef = "yes"
}

在下面的View Controller中,有设置开关

class SetConvViewController: UIViewController {
    var conversationSettingsReference: DatabaseReference!
    let userID = Auth.auth().currentUser?.uid

    var engS = "engS"
    var engGoster = ""

    @IBOutlet weak var swithEnglish: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()

        if let eng2 = defaults.value(forKey: engS) {
            swithEnglish.isOn = eng2 as! Bool
        }
    }

    let defaults = UserDefaults.standard

    @IBAction func switchEng(_ sender: UISwitch) {
        defaults.set(sender.isOn, forKey: engS)
    }
}

当我想要从这个类中访问值时,我得到了nil。

1 个答案:

答案 0 :(得分:0)

首先它没有,因为你没有从故事板或xib加载VC

第二行

let languageSettingsRef = SetConvViewController()

不是现有的,所以使用委托或任何其他观察技术来获取所呈现的VC的当前值

//

class SettingsViewController: UIViewController { 
     var setVc:SetConvViewController?
}

当您使用segue / push显示SettingsViewController时,请设置

settInstance.setVc = self

然后向var询问开关值

if self.setVc.swithEnglish.isOn{
   englishRef = "yes"
}

将var作为Bool是另一个更好的选择