Проблема с добавлением данных в табличное представление в сегментированном элементе управления - PullRequest
0 голосов
/ 12 октября 2019

У меня есть сегментированный элемент управления, который содержит два элемента,

// Create a segmented control for the stories
let segmentedControl: UISegmentedControl = {
    let sc = UISegmentedControl(items: ["Participated Stories", "Drafts"])
    sc.addTarget(self, action: #selector(handleSegmentChange), for: .valueChanged)
    sc.selectedSegmentIndex = 0
    return sc
}()

// Create a list to store all the participated stories
let participatedStories = ["Hello", "Hey", "Hi"]
// Create a list to store all the drafts
let drafts = ["Sup", "Whatsup", "Gone"]
// Create a list to store the list that needs to be displayed
lazy var rowsToDisplay = participatedStories

@objc fileprivate func handleSegmentChange() {

    switch segmentedControl.selectedSegmentIndex {
    case 0:
        rowsToDisplay = participatedStories
    default:
        rowsToDisplay = drafts
    }
    tableView.reloadData()
}

Функция handleSegmentChange выполняет то, что она изменяет данные в табличном представлении в соответствии с вкладкой, выбранной в сегментированном элементе управления. ,Это работает правильно. Теперь я хочу получить данные из Firebase и отобразить данные в табличном представлении, вот что я попробовал:

// The data for the story Drafts
struct DraftStoriesData {

    var storyKey: String
    var storyTitle: String
    var votes: Int
}

// The data for the participated stories
struct ParticipatedStoriesData {

    var storyKey: String
    var storyTitle: String
    var votes: Int
}

let participatedStories: [ParticipatedStoriesData] = []
let drafts: [DraftStoriesData] = []
lazy var rowsToDisplay = participatedStories

@objc fileprivate func handleSegmentChange() {

    switch segmentedControl.selectedSegmentIndex {
    case 0:
        rowsToDisplay = participatedStories
    default:
        rowsToDisplay = drafts
    }
    tableView.reloadData()
}

Но при этом выдается ошибка -

Невозможно назначитьзначение типа '[DraftStoriesData]' для типа '[ParticipatedStoriesData]'

1 Ответ

1 голос
/ 12 октября 2019

Проблема здесь

rowsToDisplay = drafts

drafts - это массив типа DraftStoriesData, а rowsToDisplay имеет тип ParticipatedStoriesData, поэтому назначение не будет компилироваться, поскольку вы повторяете ту же модель

struct DraftStoriesData {

    var storyKey: String
    var storyTitle: String
    var votes: Int
}

// The data for the participated stories
struct ParticipatedStoriesData {

    var storyKey: String
    var storyTitle: String
    var votes: Int
}

Вы должны удалить 1 сверху и использовать другой в качестве типа обоих массивов, таких как

 var participatedStories: [ParticipatedStoriesData] = []
 var drafts: [ParticipatedStoriesData] = []

ИЛИ

 var participatedStories: [DraftStoriesData] = []
 var drafts: [DraftStoriesData] = []
...