Неоднозначная ссылка на члена 'count' # 2 - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть эти две функции:

func search_DocumentMultimedia(documentId: Int) -> Array<Int>{

    var array:[Int]
    let downloadUrl = FileManager.default.urls(for:.downloadsDirectory, in: .userDomainMask)[0]
    let path = downloadUrl.appendingPathComponent("mwb_" + language + "_" + issue + ".db")

    do{
        let db = try Connection(path.absoluteString)
        let documentMultimediaTable = Table("DocumentMultimedia")
        let documentMultimediaIdField = Expression<Int>("DocumentMultimediaId")
        let documentIdField = Expression<Int>("DocumentId")


        for media in try db.prepare(documentMultimediaTable.select(documentMultimediaIdField, documentIdField).where(documentIdField == documentId)) {
            array.append(media[documentMultimediaIdField])
        }
    } catch{
        print(error)
    }

    return array
}

func search_Multimedia(multimediaID: [Int]) -> Array<mediaData>{

    var array:[mediaData]
    let downloadUrl = FileManager.default.urls(for:.downloadsDirectory, in: .userDomainMask)[0]
    let path = downloadUrl.appendingPathComponent("mwb_" + language + "_" + issue + ".db")

    ForEach(0..<multimediaID.count, id: \.self) { index in

        do{
            let db = try Connection(path.absoluteString)
            let documentMultimediaTable = Table("Multimedia")
            let MultimediaIdField = Expression<Int>("MultimediaId")
            let keySymbol = Expression<String>("KeySymbol")
            let track = Expression<Int>("Track")
            let issueTagNumber = Expression<Int>("IssueTagNumber")
            let mimeType = Expression<String>("MimeType")
            let filePath = Expression<String>("FilePath")

            for media in try db.prepare(documentMultimediaTable.select(MultimediaIdField, keySymbol, track, issueTagNumber, mimeType, filePath).where(MultimediaIdField == multimediaID[index])) {
                let data = mediaData(mediaID: media[MultimediaIdField], mediaType: media[keySymbol], track: media[track], issueTagNumber: media[issueTagNumber], mimeType: media[mimeType], filePath: media[filePath])
                array.append(data)
            }
        } catch{
            print(error)
        }
    }

    return array
}

Я называю их так:

func getMedia(documentId: Int, nextDocumentId: Int) /*-> Array<videoData>*/ {
        let multimediaId:[Int] = JW.search_DocumentMultimedia(documentId: documentId)
        let mediaData:[mediaData] = JW.search_Multimedia(multimediaID: multimediaId)
        print(mediaData)
    }

В search_Multimedia я получаю сообщение об ошибке «Неоднозначная ссылка на число членов» ». Я получаю эту ошибку в операторе ForEach, который использует multimediaID.count. Я попробовал все, но не могу найти, как решить это. Пожалуйста, не могли бы вы помочь? Я видел подобный вопрос здесь, но он кажется устаревшим - отсюда мой пост.

1 Ответ

1 голос
/ 12 апреля 2020

Вы используете ForEach, где ForEach не подходит. Цель ForEach - превратить коллекцию значений в коллекцию SwiftUI View s внутри тела некоторого представления коллекции, например List или VStack.

. нужно создать коллекцию View здесь. Используйте обычный оператор Swift for / in. Замените это:

ForEach(0..<multimediaID.count, id: \.self) { index in

на это:

for index in 0 ..< multimediaID.count {

Я думаю, у вас есть другие ошибки, но эта особенно важна. ForEach (как и большинство типов SwiftUI) в значительной степени зависит от вывода типов. Ошибки в вызове ForEach могут серьезно запутать реализацию вывода типа компилятора Swift. Затем компилятор часто печатает бесполезные или вводящие в заблуждение сообщения об ошибках. Поэтому, если вы замените ForEach на for / in l oop, компилятор, вероятно, даст вам более качественные сообщения о любых других ошибках, которые вы допустили в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...