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

Swift相机代码报错“Use of unresolved identifier 'session'”求解决

修复 "Use of unresolved identifier 'session'" 错误

嘿,这个问题我刚入坑Swift的时候也踩过坑!咱们先搞懂为啥会报这个错:编译器说找不到session这个标识符,本质是你在使用这个变量之前,根本没告诉编译器它存在。

看你贴的这段代码:

func setupSession() { 
    session = AVCaptureSession() 
    session.sessionPreset = AVCaptureSessionPresetPhoto
}

这里直接给session赋值,但session既不是方法内的局部变量,也不是类的属性,编译器完全不知道它是什么,自然会报错。

具体修复步骤:

  1. 先声明session变量:把它作为你当前类(比如相机页面的ViewController)的属性,放在方法外面的类作用域里。
  2. 确保导入AVFoundation框架:因为AVCaptureSession属于这个框架,不导入的话也会报错。
  3. (可选但推荐)更新语法到现代Swift标准:旧的AVCaptureSessionPresetPhoto已经被枚举值.photo取代了,更符合现在的写法。

修复后的完整代码示例:

import AVFoundation
import UIKit

class CameraViewController: UIViewController {
    // 声明session为可选类型,初始值是nil,等setupSession调用后再初始化
    private var session: AVCaptureSession?

    func setupSession() {
        // 初始化session
        session = AVCaptureSession()
        // 设置会话预设为照片质量
        session?.sessionPreset = .photo
    }
}

额外说明:

  • 用private修饰是为了遵循封装原则,只有当前类能访问这个session;
  • 用可选类型AVCaptureSession?是因为我们不会在初始化类的时候就创建session,而是通过setupSession方法来初始化,这样更灵活;
  • 如果你的Swift版本比较旧,.photo可能不生效,那可以换回AVCaptureSessionPresetPhoto,但还是建议升级语法哦。

内容的提问来源于stack exchange,提问作者x-Men2001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:55