如何让Xcode通过SwiftPackage访问API数据库表?类型访问报错求助
问题解决方法
核心错误原因
你在HomeViewModel中错误地将CLT_CLT_CLIENT当作APINetoparkclient类的嵌套类型来引用,但实际上它是apinetoparkclient模块下的顶级公共结构体,不属于类的内部成员。
具体修正步骤
1. 修正类型引用代码
将HomeViewModel中的类型声明:
@Published var societies: [APINetoparkclient.CLT_CLT_CLIENT] = []
替换为以下两种方式之一:
- 方式一(推荐,已导入模块可直接使用):
@Published var societies: [CLT_CLT_CLIENT] = [] - 方式二(明确指定模块名):
@Published var societies: [apinetoparkclient.CLT_CLT_CLIENT] = []
2. 完善数据模型的访问权限
你的CLT_CLT_CLIENT结构体中,raisonsociale属性是默认的internal权限,外部模块无法访问该属性,需要改为public:
public struct CLT_CLT_CLIENT: Identifiable, Codable { public let id: UUID? public var raisonsociale: String // 添加public修饰符 public init(id: UUID?, raisonsociale: String) { self.id = id self.raisonsociale = raisonsociale } }
3. 确保Xcode缓存清理(可选但推荐)
如果修改后仍有问题,执行以下操作:
- 清除Xcode的Derived Data:
Xcode > Settings > Locations > Derived Data,点击路径旁的箭头打开文件夹并删除所有内容 - 重启Xcode
- 在项目的Package Dependencies中,右键点击
apinetoparkclient选择Update Package
修正后的完整HomeViewModel代码
import Foundation import apinetoparkclient class HomeViewModel: ObservableObject { @Published var societies: [CLT_CLT_CLIENT] = [] @Published var selectedTab: HomeTab = .parc enum HomeTab { case parc case societies case equipment case users case reports case settings } func fetchSocieties() { APINetoparkclient.shared.fetchSocieties { result in switch result { case .success(let societies): DispatchQueue.main.async { self.societies = societies } case .failure(let error): print("Error fetching societies:", error.localizedDescription) } } } }
内容的提问来源于stack exchange,提问作者Élodie Gagé
相关产品推荐
相关产品推荐

