创建一个根据Choices

时间:2018-04-15 19:16:41

标签: arrays swift

我的歌曲是法语和中文,有不同的难度级别,如简单的中等和高级。

我正在尝试创建一个数组。我首先制作了一个原型来测试它:

var array = [[["a","b","c"],["d","e","f"],["g","h","i"]],[["j","k","l"],["m","n","o"], ["p","q","r"]]]

print(array[1][0])

/*prints j, k, l

index[0] is Chinese songs
index[1] is french songs

index[0][1]= Chinese songs with medium level 
index[1][2]=  French songs with Hard level
index[0][0]= Chinese songs with beginner level*/

我试图在我当前的程序中使用相同的原则,但我失败了。我想我会管理它如果我可以成功地将它实现到一个数组中。我也尝试过字典但是我无法做到这一点。因为我在数组中有诸如名称,歌词,mp3type等对象使得它变得困难。

当你想要把所有的歌曲添加到其中但是我想根据用户的选择自定义歌曲选择时,我的代码工作得很好。所以当他们点击中文初学者级别时,只有中文和初级级别的数组应传递给音乐播放器。

arrSong.append(SongModel(name: "Cold Water", lyrics: "Everybody.." 
path: Bundle.main.path(forResource: "ColdWater", ofType: "m4a")!))

这只是原型歌曲列表。我只是想弄清楚如何解决这个问题。我还引用了一些与我的项目相关的代码,所以也许它可以更有意义。

func setUI(){

lbl_song_name.text = arrSong[currIndex].name
lbl_lyrics.numberOfLines = 0
lbl_lyrics.text = arrSong[currIndex].lyrics
{



func SongPlay(){

self.audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: 
arrSong[currIndex].path))

let asset = AVURLAsset(url: URL(fileURLWithPath: 
arrSong[currIndex].path)).duration
}

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是有一些复杂的多维数组来搜索,而是有一个带有语言(中文/法文)的结构或类,以及作为属性的难度然后使用内置过滤器功能查找与用户选择匹配的所有歌曲。

示例(简化)

struct Song {
  var name: String
  var difficulty: Int //Enum is better here
  vae language: String
}

//Simple array with all songs
let allSongs: [Song]

//Filtering user selection
let userSelectedLevel = ... // from UI
let userSelectedLanguage = ...// from UI
let userSelection = allSongs.filter({$0.difficulty == userSelectedLevel && $0.language == userSelectedLAnguage})

数组userSelection现在将包含与用户选择匹配的歌曲,现在可用于代码中的进一步处理。