允许用户在Swift用户默认中创建密钥和值

问题描述 投票:0回答:3

我目前有我的应用程序在userDefaults中为两个不同的键添加值,添加的值是“歌曲名称”和“BPM”(每分钟节拍)两个键是sName和sBPM。

我想要做的是让用户创建具有歌曲名称和值为BPM的Key。这将允许他们从UiPickerView中选择一首歌,该应用程序可以显示BPM。

基本上。如何让用户从文本输入创建密钥,而不是为预先创建的密钥赋值。

希望这是有道理的。我对Swift和编程很新

swift nsuserdefaults userdefaults
3个回答
0
投票

考虑到您的UI上有一个UITextField用于输入歌曲名称和BMP值,在您的代码中分别引用它作为songTextField和bmpTextField,当返回Key被点击或者您想要执行操作时,您可以使用以下码

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

0
投票

在这种情况下,您可以将kay设置为SongName,将BPM值设置为其值。如下代码

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

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

随着歌曲和价值相互关联和关键将是一个独特的


0
投票

为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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.