如何解决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 举报,一经查实,本站将立刻删除。