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

Swift函数返回UIImage报错:Unexpected non-void return value in void function

问题分析与解决

错误原因

  1. fileRef.getData的回调闭包是**无返回值(Void)**类型,你在闭包内写return image属于在void函数中返回非void值,直接触发报错。
  2. 更核心的问题:getData是异步网络操作,函数retrivePhotos会在回调执行前就执行完毕,根本无法直接返回异步获取到的图片。

解决方案

方案1:使用完成回调闭包(兼容所有iOS版本)

修改函数,通过闭包传递异步结果:

func retrievePhotos(path: String, completion: @escaping (UIImage?, Error?) -> Void) {
    let storageRef = Storage.storage().reference()
    let fileRef = storageRef.child(path)
    
    fileRef.getData(maxSize: 5 * 1024 * 1024) { data, error in
        if let error = error {
            completion(nil, error)
            return
        }
        guard let data = data, let image = UIImage(data: data) else {
            let conversionError = NSError(domain: "ImageConversionError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无法将数据转换为图片"])
            completion(nil, conversionError)
            return
        }
        completion(image, nil)
    }
}

调用示例:

retrievePhotos(path: "your/image/path") { image, error in
    if let error = error {
        print("获取图片失败:\(error.localizedDescription)")
        return
    }
    if let image = image {
        // 更新UI必须切换到主队列
        DispatchQueue.main.async {
            // yourImageView.image = image
        }
    }
}

方案2:使用Async/Await(iOS 15+、macOS 12+)

利用Swift的异步语法简化代码:

func retrievePhotos(path: String) async throws -> UIImage {
    let storageRef = Storage.storage().reference()
    let fileRef = storageRef.child(path)
    
    let data = try await fileRef.getData(maxSize: 5 * 1024 * 1024)
    guard let image = UIImage(data: data) else {
        throw NSError(domain: "ImageConversionError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无法将数据转换为图片"])
    }
    return image
}

调用示例:

Task {
    do {
        let image = try await retrievePhotos(path: "your/image/path")
        // 更新UI切换到主队列
        DispatchQueue.main.async {
            // yourImageView.image = image
        }
    } catch {
        print("获取图片失败:\(error.localizedDescription)")
    }
}

内容的提问来源于stack exchange,提问作者HLPS Team

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:48:05