我想使用以下代码访问开关值。我得到零价值。从第二个视图控制器中,我获得设置值以根据值显示内容 - 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"
}
在下面的视图控制器中,有用于设置的开关
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,因为您不会从情节提要或 xib 加载 VC
第二行
let languageSettingsRef = SetConvViewController()
不是呈现的VC,所以使用委托或任何其他观察技术来获得所呈现VC的当前值
//
class SettingsViewController: UIViewController {
var setVc:SetConvViewController?
}
当您使用 segue/push 呈现SettingsViewController
时,设置
settInstance.setVc = self
然后向 var 询问开关值
if self.setVc.swithEnglish.isOn{
englishRef = "yes"
}
将 var 设为布尔值是另一个更好的选择