【问题标题】:Swift can't find variable斯威夫特找不到变量
【发布时间】:2021-03-31 07:18:28
【问题描述】:

为什么这不起作用?它用于检查 UserDefaults 中是否存在名为“语言”的变量。

func isKeyPresentInUserDefaults(key: String) -> Bool {
     return UserDefaults.standard.object(forKey: key) != nil
}   

if isKeyPresentInUserDefaults(key: language!) == true { //<-- Cannot find 'language' in scope
     print("Language variable: true")
}else {
     print("Language variable: false")
}

我尝试在错误之前添加这个:

let language: String?

...但它也没有奏效。

感谢所有可以提供帮助的人!

【问题讨论】:

  • 这段代码写在哪里?目前if isKeyPresentInUser... 是从“无处”写入的。它不在函数内部?
  • 不是关于你的问题,而是语言是可选的,所以用“var”而不是“let”来写

标签: swift variables save userdefaults


【解决方案1】:

UserDefaults 是关于使用选择的键存储和检索变量(不是它的名称)的 ,是一些字符串。您使用选择的键存储变量的值,然后使用相同的键检索存储的值。用这样的东西怎么样?

let language = "language"

isKeyPresentInUserDefaults 将返回 true 如果您(某人)之前使用以下方法将值存储在 UserDefaults 中:

UserDefaults.default.set(someVariable, forKey: language)

一些复杂的情况(只要清楚上面的文字就可以阅读):当然,如果someVariable 的值是nil,函数返回false,因为值nil 存储在UserDefaults 中。但我想你不会在 UserDefaults 中存储值为 nil 的 Optional 变量。

【讨论】:

    【解决方案2】:

    首先感谢您的支持。我找到了自己的方法来解决这个问题。希望它足够好,以后其他人也可以使用它。

    首先,我创建了一个名为“UserDefaultsMonitoring.swift”的新类

    import Foundation
    
    final class UserDefaultsMonitor {
        static let shared = UserDefaultsMonitor()
        
        public private(set) var isLanguage: Bool = false
        
        public func startMonitoring() {
            self.isLanguage = UserDefaults.standard.object(forKey: "Language") != nil
        }
    }
    

    然后我在已经由 xCode 创建的名为“ExtentionDelegate.swift”的类中添加了以下内容:

    func applicationDidBecomeActive() {
         // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
         UserDefaultsMonitor.shared.startMonitoring()
    }
    

    最后但并非最不重要的一点是,我用它来检查搜索的键是否存在:

    if !UserDefaultsMonitor.shared.isLanguage {
         NoLanguageSet()
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2016-02-08
      • 2017-11-13
      • 2015-08-19
      • 2014-09-11
      相关资源
      最近更新 更多