Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Swift SwiftUI iOS – Cannot convert value of type 'Binding<AVPlayer?>' to expected argument type 'Binding<AVPlayer>

struct LePlay: View {

    var fileName: String
    
    init(fileName: String) {
        self.fileName = fileName
    }
    
    @State var player: AVPlayer? = nil

    @State var isplaying = false
    @State var showcontrols = true
    @State var value : Float = 0
        
    var body: some View {
        
        ZStack{
            if(player != nil){
                CustomVideoPlayer(player: self.$player, isplaying: $isplaying)
                    .frame(width: 777, height: 777, alignment: .center)

                
                if(self.showcontrols){
                    Controls(player: self.$player, isplaying: self.$isplaying, pannel: self.$showcontrols, value: self.$value, memeHeight: 777, fileName: fileName)
                }
            }
        }
        .onAppear(){
            player = AVPlayer(url: URL(string: fileName)!)
        }
    }
}

I get:

Cannot convert value of type 'Binding<AVPlayer?>' to expected argument type 'Binding<AVPlayer>'

Why do I still get this error despite having if(player != nil){} ?

Adding ! like self.$player! also doesn’t solve the problem!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I tried to do just var player = AVPlayer(url: URL(string: fileName)!) right at the beginning but it doesn’t work.

Nothing basic just works in this horrendous garbage language, it’s disgusting and unintuitive. I’m getting sick and tired of swift.

>Solution :

What you are doing still doesn’t change what player is.

Take a look at this example…

let a: String? = "Hello, world!"

// The type of a is Optional<String> (aka String?)

if a != nil {
  // this code will run because a is not nil
  // but the type of a is still Optional<String>
}

To fix your code you can use optional binding…

let a: String? = "Hello, world!"

// The type of a is Optional<String> (aka String?)

if let a {
  // this code will run because a is not nil
  // and now the type of a inside this block is String and no longer Optional
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading