Я (очень) новый разработчик, пытающийся использовать Contentful в проекте SwiftUI, и у меня возникают некоторые ошибки приведения. Я пытаюсь получить доступ к двум строкам, хранящимся в Contentful и добавить их в массив. Я получаю это сообщение об ошибке при попытке напечатать результаты:
Не удалось преобразовать значение типа «Contentful.Link» (0x10c3faa88) в «Swift.String» (0x7fff87a77fc0).
Вот остальная часть моего кода. В конечном итоге я пытаюсь получить данные channel
из моей модели содержимого в Contentful, чтобы их содержимое (два поля с именами channelName
и publisher
, оба хранящие строки) было доступно в моих представлениях SwiftUI. Простите меня за то, что я новичок ie в этом - я использую ситуацию с коронавирусом, чтобы попытаться освоить некоторые базовые c iOS навыки разработки. Вот мой код:
import SwiftUI
import Contentful
import Combine
// I'm trying to make a data model that I can fill with Contentful data
// Maybe I don't need to do this or there's a better way?
struct Channel: Identifiable {
let id = UUID()
var channelName: String
var publisher: String
}
// This is an array of fake data that is similar to the content in Contentful
// Again, maybe I don't need to do this or there's a better way?
var channelData = [
Channel(
channelName: "Planet Money",
publisher: "NPR"),
Channel(
channelName: "The Indicator",
publisher: "NPR"),
]
// This is where I start using the Contentful API
// I changed the spaceId and accessToken below since this is a public forum
let client = Client(spaceId: "bl6xhrcd316q", accessToken: "btCMYzILHdhtZGIE-BjXN2vksuSjR2LeDonHQo51xS0")
func getArray(id: String, completion: @escaping([Entry]) -> ()) {
let query = Query.where(contentTypeId: id)
client.fetchArray(of: Entry.self, matching: query) { result in
switch result {
case .success(let array):
DispatchQueue.main.async {
completion(array.items)
}
case .error(let error):
print(error)
}
}
}
// Here's where I'm attempting to use the getArray function above
// The "channel" id in Contentful has two fields in it, both storing strings
// My goal with this is to append the fake data above with real data
class ChannelStore: ObservableObject {
@Published var channels: [Channel] = channelData
init() {
getArray(id: "channel") { (items) in
items.forEach { (item) in
self.channels.append(Channel(
channelName: item.fields["channelName"] as! String,
publisher: item.fields["publisher"] as! String))
}
}
}
}
Простите, если этот код смешно плох - я новичок в этом!