我目前有我的应用程序在userDefaults中为两个不同的键添加值,添加的值是“歌曲名称”和“BPM”(每分钟节拍)两个键是sName和sBPM。
我想要做的是让用户创建具有歌曲名称和值为BPM的Key。这将允许他们从UiPickerView中选择一首歌,该应用程序可以显示BPM。
基本上。如何让用户从文本输入创建密钥,而不是为预先创建的密钥赋值。
希望这是有道理的。我对Swift和编程很新
考虑到您的UI上有一个UITextField用于输入歌曲名称和BMP值,在您的代码中分别引用它作为songTextField和bmpTextField,当返回Key被点击或者您想要执行操作时,您可以使用以下码
if let songName = songTextField.text, let bmpValue = bmpTextField.text {
UserDefaults.standard.set(bmpValue, forKey: songName)
}
在这种情况下,您可以将kay设置为SongName,将BPM值设置为其值。如下代码
let songs = ["AAA", "BBB", "CCC"]
let BPMValue = 1.5
UserDefaults.standard.set(BPMValue, forKey: songs[index])
UserDefaults.standard.synchronize()
随着歌曲和价值相互关联和关键将是一个独特的
为Song所需的详细信息创建一个Struct
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
}
您可以从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值
let songName = UserDefaults.standard.integer(forKey: "sName")
let songBPM = UserDefaults.standard.integer(forKey: "sBPM")
这可能对您有帮助,您现在可以找到与Song Name对应的BPM