Swift中构建SpaceX API Mock数据时Links初始化的疑问
解决Mock数据中Links参数的填充问题
首先,基于SpaceX API的返回结构,先确认你的Patch、Links、Launch结构体大概是这样(如果和你的定义有出入,调整对应字段即可):
struct Patch: Codable { let small: String? let large: String? } struct Links: Codable { let patch: Patch? let reddit: Reddit? let flickr: Flickr? // 其他你定义的字段如webcast、article等 } struct Launch: Codable { let id: String let name: String let links: Links // 其他字段如date_utc、success等 } // 补充你可能定义的嵌套结构体示例 struct Reddit: Codable { let campaign: String? let launch: String? } struct Flickr: Codable { let small: [String]? let original: [String]? }
接下来,在你的successState函数中,逐层初始化嵌套结构体即可:
func successState() -> Launch { // 构造Patch的Mock数据 let mockPatch = Patch( small: "https://example.com/small-patch.jpg", large: "https://example.com/large-patch.jpg" ) // 构造Links里的其他嵌套结构体(如果有) let mockReddit = Reddit( campaign: "https://example.com/reddit-campaign", launch: "https://example.com/reddit-launch" ) let mockFlickr = Flickr( small: ["https://example.com/flickr-small-1.jpg"], original: ["https://example.com/flickr-original-1.jpg"] ) // 构造Links实例 let mockLinks = Links( patch: mockPatch, reddit: mockReddit, flickr: mockFlickr // 补充你定义的其他Links字段,无需填充的可选字段传nil即可 ) // 构造最终的Launch实例 return Launch( id: "mock-launch-1", name: "Mock Falcon 9 Launch", links: mockLinks, date_utc: "2024-01-01T12:00:00Z", success: true // 填充其他Launch字段 ) }
注意事项
- 如果结构体中的字段是可选类型,不想填充内容可以直接传
nil,比如patch: nil - 可以用占位图片URL,或者本地Asset图片的对应路径(如果使用本地资源)
- 直接复用调试时获取的真实API返回字段值,能让Mock数据更贴近真实场景
内容的提问来源于stack exchange,提问作者jat
相关产品推荐
相关产品推荐

