SwiftUI:将字符串数组放入单个文本中,并在数组的第二个成员上偏移

SwiftUI: Put String array into a single Text, with offset on every second member of the array

我对 Swift 和一般的编码还很陌生。我的目标是,将和弦放在歌曲的歌词之上。我设法用分隔符将和弦与歌词分开:

let lyrics = "|C|Alszik a szív és |E|alszik a szívben az |Am|aggodalom,\n\n|C|Alszik a pókhá|E|ló közelében a |Am|légy a falon."

let lyricsArray = lyrics.components(separatedBy: "|")

所以现在数组的每个偶数索引成员都是一个 和弦 ,数组的每个奇数索引成员都是一个 歌词片段 .

我想不通的是,如何将数组的每个偶数索引成员放在数组其余部分的上方。我想要的输出是这样的:Image of desired output

我尝试做一个 ForEach:

ForEach(lyricsArray, id: \.self) {
   Text("\([=11=])")
}

这样,数组的每个成员都有一个带有换行符的新文本。

我也试过减少:

lyricsArray.reduce(Text(""), { [=12=] + Text()} )

这更接近我想看到的,但从这里开始,我不知道,我怎么能把一个“.offset(x: 0, y: -30)”给每个第二个成员数组。

感谢您的回答!

struct LyricsView: View {
    let lyrics = "|C|Alszik a szív és |E|alszik a szívben az |Am|aggodalom,\n\n|C|Alszik a pókhá|E|ló közelében a |Am|légy a falon."
    ///Separates into lines
    var linesArray: [String]{
        lyrics.components(separatedBy: "\n\n")
    }
    ///Separates lines into notes
    var notesArray: [[String]]{
        var notes: [[String]] = []
        for line in linesArray{
            notes.append(line.components(separatedBy: "|"))
        }
        return notes
    }
    var body: some View {
        List{
            //Iterate through the Array of String Arrays /lines
            ForEach(notesArray, id: \.self) {line in
                HStack{
                    //Iterate through indices
                    //The - 1 is to account for the last value that would have already been used when you iterate through. You would get index out of bounds below
                    ForEach(0..<line.count - 1, id: \.self) {n in
                        if n % 2 == 1{//Check even odd
                            VStack(alignment: .center){
                                Text(line[n])
                                //This line would give you the index out of bounds
                                Text(line[n + 1])
                            }
                        }
                    }
                }
            }
            
        }
    }
}