I'm stuck on these errors
-
"Cannot declare entity named '$reel'; the '$' prefix is reserved for implicitly-synthesized declarations"
-
"Generic struct 'ForEach' requires that 'Binding<[Reel]>' conform to 'RandomAccessCollection'"
Both errors are on this line of code
ForEach($reels) { $reel in
ReelsPlayer(reel: $reel)
}
I have a TabView {} and am trying to make each page a new video similar to tik tok or vine. It works when I pass in dummy data but when I pass from my array of videos I get those errors.
Here's the rest of the code
The View:
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 {
}
}
}
MediaFile struct:
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....."),
]
Reel struct:
struct Reel: Identifiable {
var id: String = UUID().uuidString
var player: AVPlayer?
var mediaFile: MediaFile
}