我目前有我的应用程序向userDefaults中的两个不同键添加值 添加的值是“歌曲名称”和“ BPM”(每分钟的节奏) 这两个键是sName和sBPM。
我要做的是让用户使用歌曲名称和BPM值创建Key。这将允许他们从UiPickerView中选择歌曲,并且该应用可以显示BPM。
基本上。我该如何让用户从文本输入中创建键,而不是给预先创建的键赋值。
希望这是有道理的。我对Swift和一般编程很陌生
答案 0 :(得分:0)
在这种情况下,您可以将kay设置为SongName并将BPM值设置为其值。像下面的代码
let songs = ["AAA", "BBB", "CCC"]
let BPMValue = 1.5
UserDefaults.standard.set(BPMValue, forKey: songs[index])
UserDefaults.standard.synchronize()
“歌曲”和“值”相互关联,并且键将是唯一的
答案 1 :(得分:0)
考虑到您的UI上有一个UITextField可用于输入Song Name和BMP Value,并且在代码中分别以SongTextField和bmpTextField对其进行引用,当轻按Return键或每次执行操作时,都可以使用以下代码
if let songName = songTextField.text, let bmpValue = bmpTextField.text {
UserDefaults.standard.set(bmpValue, forKey: songName)
}
答案 2 :(得分:0)
为歌曲的详细信息创建结构
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值。
您可以通过
在项目中的任何位置访问此UserDefaults值let songName = UserDefaults.standard.integer(forKey: "sName")
let songBPM = UserDefaults.standard.integer(forKey: "sBPM")
这可能对您有帮助,您现在可以找到与歌曲名称相对应的BPM