Swift — Как заполнить массив

#ios #swift

#iOS #быстрый

Вопрос:

Я хочу отправить post-запрос в свой API, но у меня возникли некоторые проблемы с отображением.

Пользователь запускает VCA и видит список пользователей, который извлекается с помощью запроса GET, пользователь может нажать на ячейку и просмотреть подробности (VCB). в VCB вы можете снова нажать на ячейку, и вы получите лист действий, который обновит этот статус на доступный или недоступный. Проблема, с которой я столкнулся, заключается в заполнении массива dailyInjuryStatus в запросе POST.

Получить модель запроса:

 struct DailyInjuryIllnessPlayer: Hashable, Codable {
        var playerId: Int
        var playerName: String?
        var numberOfStatusMissingDays: Int
        var entries: [Entry]

        func hash(into hasher: inout Hasher) {
            hasher.combine(playerId)
        }

        static func == (lhs: DailyInjuryIllnessPlayer, rhs: DailyInjuryIllnessPlayer) -> Bool {
            return lhs.playerId == rhs.playerId
        }
    }

    struct Entry: Codable {
        var injuryIllnessId: Int
        var injuryIllnessName: String?
        var statusDate: Date
        var modifiedBy: String?
        var status: String?
        var playerStatusId: Int
        var parentEventId: Int?
    }
 

Модель для сообщения

 struct CreateDailyInjuryIllnessNote: Encodable {
        var teamId: UInt32
        var dailyInjuryIllnessStatus: [DailyInjuryIllnessStatus]

    }

    struct DailyInjuryIllnessStatus: Encodable {
        var iIeventId: UInt32
        var effectiveDate: Date
        var eventStatusId: UInt32
        var playerId: UInt32
    }
 

Код, который я использую для запроса (извлечение значений с экрана для отправки в API):

 
private extension DailyInjuryIllnessAPI.Model.Request.CreateDailyInjuryIllnessNote {

    static func from(playerId: Int?, statusNote: DailyInjuryIllnessPlayer) -> Self? {
        guard let playerId = playerId else { return nil }
        let teamId = getTeamId(from: statusNote)

// Here is the issue, I can populate teamId, but I cannot populate dailyInjuryIllnessStatus.

        return .init(teamId: UInt32(teamId), dailyInjuryIllnessStatus: <#T##[DailyInjuryIllnessAPI.Model.Request.DailyInjuryIllnessStatus]#>)
        }


    private static func getTeamId(from model: DailyInjuryIllnessPlayer) -> Int {
        let answer = model.playerId
        return answer
    }

    private static func getEventId(from model: DailyInjuryIllnessPlayer) -> Int {
        var answer = 1
        for eventId in model.entries {
            answer = eventId.injuryIllnessId
        }

        return answer
    }

    private static func getEffectiveDate(from model: DailyInjuryIllnessPlayer) -> Date {
        var answer = Date()
        for date in model.entries {
            answer = date.statusDate
        }
        return answer
    }

    private static func getEventStatusId(from model: DailyInjuryIllnessPlayer) -> Int {
        var answer = 1
        for statusId in model.entries {
            answer = statusId.playerStatusId
        }
        return answer
    }

    private static func getPlayerId(from model: DailyInjuryIllnessPlayer) -> Int {
        var answer = model.playerId
        return answer
    }



    }
 

Проблема, как указано в коде, заключается в return .init том, что Swift ожидает, что она будет похожа на модель, которая имеет TeamID и массив DailyInjuryIllnessStatus . Как я могу поместить методы, которые я использовал для извлечения этих значений, в массив

Комментарии:

1. Откуда DailyInjuryIllnessStatus должен взяться массив данных? Кстати, циклы в других статических методах кажутся бессмысленными. Всегда возвращается последний элемент цикла, потому что возвращаемое значение перезаписывается.

2. @vadian массив поступает из API. Это то, как я структурировал API .. есть ли лучший способ выполнить цикл

3. В данный момент, например getEffectiveDate , делает то же самое, что и return model.entries.last?.statusDate ?? Date()

4. да, getEffectiveDate должен вернуть StatusDate

5. Похоже, ты не понимаешь. model.entries представляет собой массив с несколькими элементами, каждый элемент содержит a statusDate . Какой из них вы хотите использовать? В коде используется последний вариант, мое предложение — это оптимизированная версия вашего кода.