MPMediaItem 数组不在 SwiftUI 列表中打印歌曲标题
MPMediaItem array not printing song titles in SwiftUI List
我有一个 Swift 项目可以在 table 视图中打印歌曲列表。以下是检索这些歌曲并将其放入行中的当前工作代码的基础。
Swift:
var mySongs: [MPMediaItem] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let song = mySongs[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let myText = song.title
cell.textLabel?.text = myText; return cell
}
我正在尝试将此代码移至 SwiftUI。
Swift UI:
private var mySongs: [MPMediaItem] = []
var body: some View {
List {
let song = mySongs[indexPath.row]
let myText = song.title
ForEach(self.mySongs, id: \.self) {
item in Text(myText)
}
}
}
但是,SwiftUI 不允许我跟踪每个元素的路径。即使我尝试用 myText 替换 mySongs.title 以消除对 indexPath 的需求,它也会失败。
ForEach(self.mySongs, id: \.self) {
item in Text(mySongs.title)
}
给我一个
“[MPMediaItem]”类型的值没有成员 'title'
错误。
我想也许我在这方面做的 for-each 是完全错误的,所以我去看看其他方法,例如 https://learnappmaking.com/swiftui-list-foreach-how-to/ 这个网站上有什么,但是在实施时我得到了相同的结果并且是一样不成功。
我错过了什么或者我应该去哪里解决这个问题?
看起来你走在正确的轨道上——我认为只是对闭包中 ForEach
提供的内容有点困惑。
这应该有效:
private var mySongs: [MPMediaItem] = []
var body: some View {
List {
ForEach(mySongs, id: \.self) { item in
Text(item.title ?? "unknown title")
}
}
}
item
为您提供 ForEach
正在迭代的当前元素,因此实际上没有理由使用索引。由于 title
是 String?
而 Text
需要 non-optional String
,如果没有标题,您必须提供默认值。
我有一个 Swift 项目可以在 table 视图中打印歌曲列表。以下是检索这些歌曲并将其放入行中的当前工作代码的基础。
Swift:
var mySongs: [MPMediaItem] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let song = mySongs[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let myText = song.title
cell.textLabel?.text = myText; return cell
}
我正在尝试将此代码移至 SwiftUI。
Swift UI:
private var mySongs: [MPMediaItem] = []
var body: some View {
List {
let song = mySongs[indexPath.row]
let myText = song.title
ForEach(self.mySongs, id: \.self) {
item in Text(myText)
}
}
}
但是,SwiftUI 不允许我跟踪每个元素的路径。即使我尝试用 myText 替换 mySongs.title 以消除对 indexPath 的需求,它也会失败。
ForEach(self.mySongs, id: \.self) {
item in Text(mySongs.title)
}
给我一个 “[MPMediaItem]”类型的值没有成员 'title' 错误。
我想也许我在这方面做的 for-each 是完全错误的,所以我去看看其他方法,例如 https://learnappmaking.com/swiftui-list-foreach-how-to/ 这个网站上有什么,但是在实施时我得到了相同的结果并且是一样不成功。
我错过了什么或者我应该去哪里解决这个问题?
看起来你走在正确的轨道上——我认为只是对闭包中 ForEach
提供的内容有点困惑。
这应该有效:
private var mySongs: [MPMediaItem] = []
var body: some View {
List {
ForEach(mySongs, id: \.self) { item in
Text(item.title ?? "unknown title")
}
}
}
item
为您提供 ForEach
正在迭代的当前元素,因此实际上没有理由使用索引。由于 title
是 String?
而 Text
需要 non-optional String
,如果没有标题,您必须提供默认值。