斯威夫特找不到变量
Posted
技术标签:
【中文标题】斯威夫特找不到变量【英文标题】: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”来写
【参考方案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()
【讨论】:
以上是关于斯威夫特找不到变量的主要内容,如果未能解决你的问题,请参考以下文章