【问题标题】:Making a variable value constant in swift快速使变量值保持不变
【发布时间】:2017-10-04 09:21:06
【问题描述】:

我对 swift 编码非常陌生,所以我几乎不知道任何语法。 我在视图控制器中定义一个变量并为其分配一个随机的 4 位值。 我只想在安装/更新应用程序时分配此值一次,而不是每次用户打开应用程序时。 如果你们中的任何人知道解决此问题的方法,请帮助我。以下是我目前的代码

import UIKit
let stranger = String(arc4random_uniform(10000))

class ViewController: UIViewController {...}

【问题讨论】:

  • 使用唯一键将值保存到用户默认值中。通过提供用户默认值的唯一键来访问该值。
  • userDefaults 是一种在非易失性内存中轻松存储数据的好方法,但如果要存储的值是秘密/私有的,您可能需要检查钥匙串。 UserDefaults 不安全,可以轻松读取。

标签: ios swift constants


【解决方案1】:

您应该使用UserDefaults 来保存您的随机值。当你第一次打开你的应用程序时,你会在 stranger 中获得一些随机值。使用特定的 key 将这些值添加到 UserDefaults 中,您可以使用在 UserDefault 中设置的 key 访问值。

例如

你在stranger中得到随机值1234那么你应该先检查你是否已经设置了这个值?

if UserDefaults.standard.object(forKey: "keyRandom") == nil { // If value already set then you do not need to reset
  UserDefaults.standard.set(stranger, forKey: "keyRandom")
}

如果你想访问价值,你可以通过

print("\(UserDefaults.standard.object(forKey: "keyRandom") ?? "not Found")")

【讨论】:

  • 不要对键使用值,也不要强制解包。如果尚未设置该值,您的应用程序将崩溃。此外,UserDefaults 有一个特定的方法来从中检索字符串,称为 string(forKey:) 以及其他类型。它还有一种方法可以将默认值注册到其中,如下面的答案所示。
  • 不要使用 setValue 使用 set(Any:, forKey:) 再次不要使用 value(forKey:) 使用 string(forKey:) 或 object(forKey:)
【解决方案2】:

如果您想在两次启动之间保持持久性,则需要将数据存储在持久性数据存储中。 UserDefaults 是一个简单的解决方案,您可以使用registerDefaults 方法播种它。

注册您的默认属性。在AppDelegate.didFinishingLaunching 可能是个好地方

UserDefaults.standard.register(defaults: [
            "MyKey" : String(arc4random_uniform(10000))
        ])

取出值:

let stranger = UserDefaults.standard.string(forKey: "MyKey")

如果您不想在应用启动时注册默认值,或者需要更改它,那么您也可以在第一次需要时设置该属性,使用if let 检查它是否已经存在,并且如果没有,请设置它。

func getStranger() -> String {
    if let v = UserDefaults.standard.string(forKey: "MyKey") {
        return v
    } else {
        let rand = String(arc4random_uniform(10000))
        UserDefaults.standard.set(rand, forKey:"MyKey")
        return rand
    }
}

注意:在 SO 答案框中编写的代码未经测试,可能包含语法错误。仅用于演示目的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 2011-09-03
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多