You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串类型参数传入URL路径?SwiftUI初始化AVPlayer报错排查

错误原因
  • 你错误地将获取Bundle路径的Swift代码逻辑拼接成了普通字符串,URL初始化方法接收的是真实的路径字符串,不是可执行的Swift代码文本,所以传入你拼接的fullfilepath完全不符合参数要求,才会抛出“No exact matches in call to initializer”错误。
  • 你直接用实例属性给@State修饰的player做默认初始化,此时实例还没完成初始化流程,属性值还不可用,逻辑本身不成立。
正确修改代码

直接在初始化方法中执行获取资源路径、生成URL的逻辑,不要做无意义的代码文本拼接:

import AVKit
import SwiftUI

struct VideoBox: View {
    var videoname: String
    let ext: String = "mp4"
    @State var player: AVPlayer
    
    init(videoname: String) {
        self.videoname = videoname
        // 直接获取真实的视频文件路径
        guard let videoPath = Bundle.main.path(forResource: videoname, ofType: ext) else {
            // 找不到文件的降级处理,可根据需求替换为加载占位视频的逻辑
            fatalError("找不到指定视频文件:\(videoname).\(ext)")
        }
        // 生成合法的本地文件URL
        let videoURL = URL(fileURLWithPath: videoPath)
        // 给@State属性初始化需要加下划线前缀
        self._player = State(initialValue: AVPlayer(url: videoURL))
    }
    
    var body: some View {
        // 播放器展示逻辑示例
        VideoPlayer(player: player)
            .onAppear {
                player.play()
            }
    }
}

你原有调用VideoBox的代码不需要修改,只需要额外确认:你的3mintestvideo.mp4已经导入到Xcode项目中,并且勾选了对应Target的Membership选项,在Build Phases -> Copy Bundle Resources列表中可以找到该文件。

内容的提问来源于stack exchange,提问作者Shari Solomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:54:10