Supabase类型歧义错误求助:表达式类型缺乏上下文
求助:fetchUserData()中userId获取失败的Bug问题
我在这个Bug上耗了远超预期的时间,恳请大家帮忙。该Bug出现在fetchUserData()函数的如下代码行中:
guard let userId = supabase.auth.user()?.id as? String else {
HomeViewModel.swift 文件
import Foundation import SwiftUI import Combine import Supabase class HomeViewModel: ObservableObject { @Published var username: String = "" private var cancellables = Set<AnyCancellable>() private let userDataAccess: UserDataAccess private let supabase = SupabaseClient(supabaseURL: URL(string: Config.supabaseURL)!, supabaseKey: Config.supabaseKey) init() { userDataAccess = UserDataAccess(supabase: supabase) fetchUserData() } private func fetchUserData() { guard let userId = supabase.auth.user()?.id as? String else { return } userDataAccess.retrieveUserData(user_id: userId) { [weak self] result in DispatchQueue.main.async { switch result { case .success(let userData): self?.username = userData.display_name case .failure(let error): print("Failed to fetch user data: \(error)") } } } } }
UserDataAccess 文件
import Supabase import Foundation class UserDataAccess { private let supabase: SupabaseClient init(supabase: SupabaseClient) { self.supabase = supabase } func retrieveUserData(user_id: String, completion: @escaping (Result<UserData, Error>) -> Void) { let query = supabase.database .from("user_data") .select(columns: "*") .filter(column: "user_id", operator: .eq, value: user_id) .single() Task { do { let response: UserData = try await query.execute().value completion(.success(response)) } catch { completion(.failure(error)) } } } func insertUserData(userData: UserData, completion: @escaping (Result<UserData, Error>) -> Void) { do { let encoder = JSONEncoder() let jsonData = try encoder.encode(userData) if let jsonObject = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any] { let encodableObject = jsonObject.mapValues { AnyEncodable($0) } let query = supabase.database .from("user_data") .insert(values: encodableObject, returning: .representation) .single() Task { do { let response: UserData = try await query.execute().value completion(.success(response)) } catch { completion(.failure(error)) } } } else { completion(.failure(NSError(domain: "InsertUserDataError", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to convert userData to JSON"]))) } } catch { completion(.failure(error)) } } }
UserData 文件
import Foundation struct UserData: Codable { let user_id: String let display_name: String let age: Int let gender: String let height: Double? let weight: Double? let fitness_goal: String enum CodingKeys: String, CodingKey { case user_id = "user_id" case display_name = "display_name" case age = "age" case gender = "gender" case height = "height" case weight = "weight" case fitness_goal = "fitness_goal" } }
非常感谢各位的帮助!
内容的提问来源于stack exchange,提问作者Your Friend
相关产品推荐
相关产品推荐

