允许用户在 Swift userdefaults 中创建键和值

Allowing User to Create a Key and Value in Swift userdefaults

我目前让我的应用向 userDefaults 中的两个不同键添加一个值 添加的值是 "Song Name" 和 "BPM"(每分钟节拍) 这两个键是 sName 和 sBPM。

我想要做的是让用户用歌曲名称和值为 BPM 来创建 Key。这将允许他们 select 来自 UiPickerView 的歌曲并且该应用程序可以显示 BPM。

基本上。我如何让用户从文本输入中创建一个键,而不是为预先创建的键赋值。

希望这是有道理的。我对 Swift 和一般编程还很陌生

在这种情况下,您可以将 kay 设置为 SongName 并将 BPM 值设置为它的值。喜欢下面的代码

let songs = ["AAA", "BBB", "CCC"]
let BPMValue = 1.5

UserDefaults.standard.set(BPMValue, forKey: songs[index])
UserDefaults.standard.synchronize()

有了Song和value的关联,key就会是唯一的

考虑到您的 UI 上有一个用于输入歌曲名称和 BMP 值的 UITextField,当 return Key is Tapped 或任何时候你想执行操作,你可以使用下面的代码

if let songName = songTextField.text, let bmpValue = bmpTextField.text {
    UserDefaults.standard.set(bmpValue, forKey: songName)
}

为歌曲的详细信息创建结构

struct songDetails {
   var songName : String
   var songBPM : String
}

现在您可以使用此结构类型创建数组,

var songDetailsArray : [songDetails] = []

并且您可以通过从 UITextFields 获取输入来在数组中添加新歌曲

songDetailsArray.append(songDetails(songName: songNameTextField.text!, songBPM: bpmTextField.text!))

并使用相同的数组轻松将其添加到 UIPIckerView 中

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return songDetailsArray[row].songName
}

您可以 select 来自 UIPickerView 的歌曲并通过

访问其名称
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
   let songName = songDetailsArray[row].songName
   let correspondingBpm = songDetailsArray[row].songBPM
   print(correspondingBpm)        //this is the corresponding bmp to the seleced song name 
   UserDefaults.standard.set(songName, forKey: "sName")
   UserDefaults.standard.set(correspondingBpm, forKey: "sBPM")
}

这里您只为您的歌曲和相应的 BPM 创建了两个 UserDefaults 值。

并且您可以通过

在项目的任何位置访问此 UserDefaults 值
let songName = UserDefaults.standard.integer(forKey: "sName")
let songBPM = UserDefaults.standard.integer(forKey: "sBPM")

这可能对你有帮助,你现在可以找到歌曲名称对应的BPM