gpt4 book ai didi

ios - 无法转换类型为 'LazyFilterBidirectionalCollection>' 的返回表达式

转载 作者:行者123 更新时间:2023-11-28 06:24:45 25 4
gpt4 key购买 nike

我正在尝试将我未编写的 Swift 2.2 iOS 应用程序迁移到 Swift 3。有许多函数使用 Realm 来获取模型并将它们返回到数组中。这些都在 Swift 2.x 中有效,但在 Swift 3 中生成了以下错误。我还包含了相关的函数定义。

/SubmissionDataManager.swift:184:16: Cannot convert return expression of type 'LazyFilterBidirectionalCollection>' to return type '[EntryModel]'

func validateSubmission(_ submissionId: Int) -> ([EntryModel]) {
let realm = try! Realm()

let submissionModel = realm.objects(SubmissionModel.self).filter({ $0.id == submissionId }).first!

let entryModels = submissionModel.entryModels

// Check for all entry details field which are mandatory and are empty and not hidden
let emptyEntryModels = entryModels.filter({ $0.entryDetailArray.filter({ $0.entryDetailValue.isEmpty && $0.isMandatory && !($0.isHidden) }).count > 0 })

return emptyEntryModels
}

我不确定实际问题是什么,或者我将如何解决它。任何建议表示赞赏。

最佳答案

为了提高效率,Swift 推迟了数组的创建。它不是为您提供数组,而是为您提供 LazyFilterBidirectionalCollection,这是一个惰性 Collection 包装器,其中包含满足谓词的基础集合的元素。在您的情况下,是满足您传递给 filter 的闭包的 Realm 元素。 Lazy 意味着当您访问它们时,值是从 Realm 中提取的,而不是一次全部提取。 Collection 是一个符合SequenceIndexable 的协议(protocol)。 Sequence 是一种提供对其元素的顺序、迭代访问的类型。因此,在最基本的层面上,LazyFilterBidirectionalCollection 是一个序列。

Array 有一个初始化程序,可以将 Sequence 转换为数组:

init<S : Sequence where S.Iterator.Element == Element>(_ s: S)

因为你需要返回一个真实的数组

替换:

return emptyEntryModels

与:

return Array(emptyEntryModels)

这将从 LazyFilterBidirectionalCollection 中创建一个正确的数组。


使用此 Array 初始化程序将序列转换为数组的其他示例:

let digits = Array(0...9)                             // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let odds = Array(stride(from: 1, through: 9, by: 2)) // [1, 3, 5, 7, 9]

关于ios - 无法转换类型为 'LazyFilterBidirectionalCollection>' 的返回表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com