Swift 用户默认值 - 数组

Swift user defaults - array

以下代码出现错误

Binary operator '==' cannot be applied to operands of type '[String]?' and 'String'

    func loadDefaults() {

    let userDefaults = UserDefaults.standard.object(forKey: "storedArray") as? [String]
    if (userDefaults == "") || userDefaults != nil{
        persons = userDefaults!
    }else{
        persons = [""]
    }

}

在您的代码中,userDefaults 属于 [String]? 类型,而不是 String 类型,可以与 "" 进行比较。二元运算符==只能在相同类型的两个实例之间使用(此类型必须采用Equatable协议才能使用==)。

您可以使用此代码段来检查 userDefaults 不是 nil :

if let defaults = userDefaults {
    persons = defaults
} else {
    persons = [""]
}

或者使用 guard 语句:

guard let defaults = userDefaults else {
    persons = [""]
    return
}
persons = defaults

您的最终函数将如下所示:

func loadDefaults() {
    let userDefaults = UserDefaults.standard.object(forKey: "storedArray") as? [String]
    if let defaults = userDefaults {
        persons = defaults
    } else {
        persons = [""]
    }
}

或:

func loadDefaults() {
    let userDefaults = UserDefaults.standard.object(forKey: "storedArray") as? [String]
    guard let defaults = userDefaults else {
        persons = [""]
        return
    }
    persons = defaults
}

P.S: persons = [""] 表示 persons 将包含一个元素,即 ""。如果你想要一个空数组使用这个:persons = []

首先有一个专门的方法array(forKey来检索数组。

一个空数组 isEmpty,不能与空数组 String

进行比较

如果你想加载存储的数组或在找不到对象时分配一个空数组,请使用

func loadDefaults() {
    // a variable name userDefaults for the array is confusing
    if let storedArray = UserDefaults.standard.array(forKey: "storedArray") as? [String] {
        persons = storedArray
    } else {
        persons = []
    }
}

或更短

func loadDefaults() {
    persons = UserDefaults.standard.array(forKey: "storedArray") as? [String] ?? []
}