微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决SwiftUI:将字符串数组放入单个文本中,在数组的每个第二个成员上都有偏移量

我对 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("\($0)")
}

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

我也尝试过减少:

lyricsArray.reduce(Text(""),{ $0 + Text($1)} )

这更接近我想要看到的,但从这里开始,我不知道,我怎么能将“.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])
                            }
                        }
                    }
                }
            }
            
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。