Swift包中Public初始化器在结构体外部无法访问问题求助
问题原因与解决方法
核心问题
包外调用代码未导入Foundation框架,导致编译器无法识别FileWrapper类型,进而找不到匹配的初始化器。
你的XYDocument结构体中init(_ file: FileWrapper)初始化器依赖Foundation中的FileWrapper类型:
public init(_ file: FileWrapper) throws { guard let data = file.regularFileContents else { throw CocoaError(.fileReadCorruptFile) } self = try JSONDecoder().decode(Self.self, from: data) }
Swift包内部可能因默认配置自动导入了Foundation,但包外的独立代码必须显式导入该框架,否则编译器会把FileWrapper视为未知类型,自然匹配不到对应的初始化器。
解决步骤
- 在包外调用的代码文件顶部,同时导入
Foundation和你的Swift包:import Foundation import 你的Swift包名称 - 检查Swift包的
Package.swift,确保已声明对Foundation的依赖(Xcode创建的包通常默认包含,若缺失则添加):targets: [ .target( name: "你的包名称", dependencies: [ .product(name: "Foundation", package: "swift-foundation") ] ), // 测试目标等其他配置 ]
额外验证
如果导入Foundation后仍报错,确认两点:
init(_ file: FileWrapper) throws的public修饰符已正确添加(你的代码中已满足)- 包外代码确实正确导入了你的Swift包
内容的提问来源于stack exchange,提问作者vbwx
相关产品推荐
相关产品推荐

