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])
}
}
}
}
}
}
}
}
我对 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])
}
}
}
}
}
}
}
}