斯威夫特找不到变量

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()

【讨论】:

以上是关于斯威夫特找不到变量的主要内容,如果未能解决你的问题,请参考以下文章

我的应用找不到导航器变量 - “ReferenceError:找不到变量:导航器”

错误找不到符号变量 id

Cordova 找不到变量:NativeStorage

找不到变量:Safari 中的 MediaRecorder

Cordova 找不到 ANDROID_HOME 环境变量

MATLAB7.0安装后,启动弹出找不到指定的模块