【问题标题】:Ambiguous reference to member 'count' #2对成员“计数”#2 的模糊引用
【发布时间】:2020-04-12 02:40:07
【问题描述】:

我有这两个功能:

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 中,我不断收到一条错误消息,提示“对成员 'count' 的引用不明确”。我在使用 mediaID.count 的 ForEach 语句上收到此错误。我已经尝试了一切,但找不到如何解决这个问题。请问你能帮忙吗?我在这里看到了一个类似的问题,但它似乎已经过时了——因此我的帖子。

【问题讨论】:

  • 与您的问题无关,但您应该以大写字母开头的所有类型命名let mediaData:[MediaData] =

标签: swift swiftui


【解决方案1】:

您正在使用ForEach,而ForEach 不合适。 ForEach 的目的是将值集合转换为 SwiftUI Views 的集合,这些集合位于某个集合视图的主体内,例如 ListVStack

您无需在此处创建Views 的集合。使用常规的 Swift for/in 语句。替换这个:

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

用这个:

for index in 0 ..< multimediaID.count {

我认为您还有其他错误,但这一点尤为重要。 ForEach(像大多数 SwiftUI 类型一样)严重依赖于类型推断。 ForEach 调用中的错误会严重混淆 Swift 编译器的类型推断实现。然后编译器经常打印无用或误导性的错误消息。因此,如果您将 ForEach 替换为 for/in 循环,编译器可能会为您提供有关您在此代码中犯的任何其他错误的更好消息。

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 2016-11-21
    • 1970-01-01
    • 2019-11-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多