Каждый раз, когда я пытаюсь добавить прокрутку или навигационное представление в свой код swiftui, это приводит к тому, что приложение ничего не загружает из api. В настоящее время я использую API OMDB. Вставлено мое хранилище mov ie и мой ContentView. В настоящее время я использую настраиваемое представление карты для отображения изображения и заголовка из хранилища mov ie, но после попытки включить режим прокрутки весь предварительный просмотр визуализированного приложения становится полностью белым. И ничего не появится снова, пока я не закомментирую прокрутку. Я пробовал использовать горизонтальный вид и простое изображение и текстовый стек, чтобы увидеть, не портит ли карточный вид что-то с прокруткой.
Учебник, которому я следовал, чтобы зайти так далеко с некоторыми изменениями, здесь: https://www.youtube.com/watch?v=NvyAN81YcO0
В настоящее время я использую Xcode 11.6.
import Foundation
struct MovieResponse : Decodable{
let movies: [Movie]
private enum CodingKeys:String, CodingKey{
case movies = "Search"
}
}
struct Movie: Decodable{
let imdbID :String
let title: String
let poster: String
let type: String
let year: String
private enum CodingKeys: String, CodingKey{
case imdbID
case title = "Title"
case poster = "Poster"
case type = "Type"
case year = "Year"
}
}
class MovieStore: ObservableObject{
@Published var movies: [Movie]? = [Movie]()
func getAll(){
guard let url = URL(string: "") else{
fatalError("Invalid url")
}
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else{
return
}
let movieResponse = try? JSONDecoder().decode(MovieResponse.self, from:data)
if let movieResponse = movieResponse {
DispatchQueue.main.async{
self.movies = movieResponse.movies
}
}
}.resume()
}
}
import SwiftUI
struct CardView: View {
var image: URLImage
var type: String
var title: String
var year: String
var body: some View {
VStack {
image
.aspectRatio(contentMode: .fit)
HStack {
VStack(alignment: .leading) {
Text(type)
.font(.headline)
.foregroundColor(.secondary)
Text(title)
.font(.title)
.fontWeight(.black)
.foregroundColor(.primary)
.lineLimit(3)
Text(year)
.font(.caption)
.foregroundColor(.secondary)
}
.layoutPriority(100)
Spacer()
}
.padding()
}
.cornerRadius(10)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(Color(.sRGB, red: 150/255, green: 150/255, blue: 150/255, opacity: 0.1), lineWidth: 1)
)
.padding([.top, .horizontal])
}
}
struct ContentView: View {
@ObservedObject var store: MovieStore
var body: some View {
// ScrollView{
HStack{
ForEach(store.movies ?? [Movie](), id: \.imdbID){ movie in
VStack{
// URLImage(url: movie.poster)
// .frame(width: 100, height: 150)
// Text(movie.title)
// .frame(maxHeight: .infinity, alignment: .top)
CardView(image: URLImage(url:movie.poster), type: movie.type, title: movie.title, year: movie.year)
}
}
}
// }
.onAppear(){
self.store.getAll()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(store: MovieStore())
}
}
Изменить:
Мне удалось сгенерировать приложение с прокруткой с фильмами, всплывающими из api. Но только с атрибутом list. Я заметил, что получаю сообщение об ошибке, и не уверен, влияет ли это на проверку связи API.
введите описание изображения здесь
2020-08-01 18:28:26.274953-0500 Nyx[19421:1105938] Task <B38BF736-765C-4C69-9ADE-AD889ED7BBE5>.<4> finished with error [-1002] Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSUnderlyingError=0x600003c14000 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}, NSErrorFailingURLStringKey=N/A, NSErrorFailingURLKey=N/A, NSLocalizedDescription=unsupported URL}