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

标签 ios arrays swift model realm

我正在尝试将我未编写的 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/

相关文章:

swift - 如何在 Swift 闭包中弱捕获多个参数?

objective-c - xCode:通过控制台访问对象的属性

ios - 在 iOS 后台进行信标测距

arrays - 动态数组与静态数组有何不同?

java - 如何创建固定字节大小的字符串

ios - 如何正确地释放一组继承自 SKSpriteNode 的对象

xcode - 船舶与硬币相撞无法正常工作

ios - 以编程方式同时关闭 UINavigation View 和模态视图

ios - viewController 在 segue 通过之前呈现

php - 此阵列的最佳解决方案