Решение проблем при использовании Contentful с SwiftUI - PullRequest
1 голос
/ 17 марта 2020

Я (очень) новый разработчик, пытающийся использовать 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))
                }
            }
    }
}

Простите, если этот код смешно плох - я новичок в этом!

...