如何解决在 Swift Tik Tok 克隆中传递视频数组时,ForEach“隐式合成声明”错误:(
这些错误
“无法声明名为 '$reel' 的实体;'$' 前缀是为隐式合成声明保留的”
“通用结构 'ForEach' 要求 'Binding' 符合 'RandomAccessCollection'”
两个错误都在这个 ForEach
ForEach($reels) { $reel in
ReelsPlayer(reel: $reel)
}
这是不是因为我的视频是自定义类型,因此 swift 无法识别它们,这给了我“RandomAccessCollection”错误?
我有一个 TabView {},我正在尝试将每个页面制作成类似于 tik tok 或 vine 的新视频。当我传入虚拟数据时它可以工作,但是当我从我的视频数组中传递时,我得到了这些错误。
视图:
import SwiftUI
import AVKit
struct ReelsView: View {
@State var currentReel = ""
// extracting AVPlayer from media file
@State var reels: [Reel] = MediaFileJSON.map { item -> Reel in
let url = Bundle.main.path(forResource: item.url,ofType: "MP4") ?? ""
let player = AVPlayer(url: URL(fileURLWithPath: url))
return Reel(player: player,mediaFile: item)
}
var body: some View {
// setting width and height for rotated view
GeometryReader { proxy in
let size = proxy.size
// vertical page tab view
TabView(selection: $currentReel) {
ForEach($reels) { $reel in // **ERRORS HERE**
ReelsPlayer(reel: $reel)
// setting width
.frame(width: size.width)
.padding()
// rotate content
.rotationEffect(.init(degrees: -90))
}
}
// Rotate View
.rotationEffect(.init(degrees: 90))
// setting height as width
.frame(width: size.height)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
// setting max width
.frame(width: size.width)
}
}
}
struct ReelsView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ReelsPlayer: View,Identifiable {
var id: ObjectIdentifier
@Binding var reel: Reel
var body: some View {
ZStack {
}
}
}
媒体文件结构:
struct MediaFile: Identifiable {
var id = UUID().uuidString
var url: String
var title: String
var isExpanded: Bool = false
}
var MediaFileJSON = [
MediaFile(url: "Reel1",title: "Apple AirTag......."),MediaFile(url: "Reel2",title: "this is the second."),MediaFile(url: "Reel3",title: "the third"),MediaFile(url: "Reel4",title: "wooooooooooooo ya"),MediaFile(url: "Reel5",title: "ay ayayayayay ayay lsdfk sl"),MediaFile(url: "Reel6",title: "this is the last one....."),]
卷轴结构:
struct Reel: Identifiable {
var id: String = UUID().uuidString
var player: AVPlayer?
var mediaFile: MediaFile
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。