json - 使用带有 nil 对象的 swift URLImage 包
问题描述
我正在使用新闻 API 来检索新闻文章,但有时 imageURL 为 nil。发生这种情况时,URLImage 包无法加载到相关图像中,并且应用程序上的任何内容都不会加载。
如果 imageURL 不存在,有人可以告诉我如何使用某种选项来获得默认图像。
或者
如果它不符合某些条件(例如 imageURL 的值为 nil),则不完全加载到列表的行中
以上是在视图中加载的代码。
var body: some View {
NavigationView {
// for every single post in the post array
List(networkManager.posts) { post in
NavigationLink(destination: DetailView(url: post.url)) {
VStack {
Text(post.title)
.bold()
HStack {
Text(post.description ?? "No description provided.")
.padding(.top)
// Check the url of the image
URLImage(URL(string: post.urlToImage)!) { proxy in
proxy.image
.resizable()
.aspectRatio(contentMode: .fit)
}
.frame(width:150)
}
}
}
}
.navigationBarTitle("Science Bite")
}
// This calls fetch data
.onAppear {
self.networkManager.fetchData()
}
}
此外,如果您需要查看更多我的代码来解决问题,这里是我的 GitHub 存储库的链接。Github 链接
非常抱歉给您带来不便,因为这是我的第一个项目。
解决方案
仅供参考,我通过将 UIImage 代码移动到另一个结构中(可选地)另一个文件来解决了这个问题。然后,我为 urlToImage 的未包装选项字符串添加了一个初始化程序,并通过使用可选绑定为非可选的新字符串添加了一个计算属性。
这是代码:
struct URLImageView: View {
let badURL: String?
var imgURL: String {
if let safeURL = badURL {
return safeURL
} else {
return "https://thumbs-prod.si-cdn.com/s-jZTk0XtVmp-89MlOgFXqaAVe4=/fit-in/1600x0/https://public-media.si-cdn.com/filer/29/0f/290fb8c0-1872-46e5-8c12-235742905def/science_smithsonian_magazine_booklist_2019.png"
}
}
var body: some View {
URLImage(URL(string: imgURL)!) { proxy in
proxy.image
.resizable()
.aspectRatio(contentMode: .fit)
}
.frame(width: 150)
}
然后我使用以下代码将此结构添加到我的主要内容视图中:
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
var body: some View {
NavigationView {
// for every single post in the post array
List(networkManager.posts) { post in
NavigationLink(destination: DetailView(url: post.url)) {
VStack {
Text(post.title)
.bold()
HStack {
Text(post.description ?? "No description provided")
.padding(.top)
// Check the url of the image
URLImageView(badURL: post.urlToImage)
}
}
}
}
.navigationBarTitle("Science Bite")
}
// This calls fetch data
.onAppear {
self.networkManager.fetchData()
}
}
希望这将帮助任何有类似问题的人。
推荐阅读
- azure - Azure 应用程序网关错误 502
- json - 在 Angular 中通过 Key 获取 JSON 值
- reactjs - 如何最小化 React Condition 代码?
- css - fa fa spinner 未在浏览器中显示
- mysql - MySQL root 用户 UPDATE 命令被拒绝
- php - laravel - 收藏忘记子收藏
- powershell - 使用powershell在文本文件中找到特定行后如何停止Get-Content -wait?按需退出管道
- java - 如何配置 Intellij 以运行我的 Java 程序?
- php - LDAP 空标签URI
- google-maps - 某些邮政编码未从澳大利亚的 Google Geocode API 返回预期结果