首页 > 解决方案 > 字符串数组除外时使用 LazyMapSequence

问题描述

我有一个用户对象

@objc(User)
public class User: NSManagedObject {
    @NSManaged public var firstname: String
    @NSManaged public var lastname: String
    @NSManaged public var country: String
    @NSManaged public var friends: NSSet // of User objects

    var full: String {
        firstname + " " + lastname
    }

    var friendsArray: [User] {
        friends.allObjects as? [User] ?? []
    }
}

在某个时候,我想将大量用户(80k 对象)映射到视图模型数组

struct ItemViewModel: Hashable {
    let id: UUID
    let friendsName: [String] 
}

没有lazy需要很长时间,所以我选择了lazy的用法:

func prepareViewModel(users: [User]) -> [ItemViewModel] {
    users.map { user in
        let friendsName = user.friendsArray.lazy.filter{["en", "fr"].contains($0.country)}.map(\.full)
        return ItemViewModel(id: UUID(), friendsName: friendsName)
    }
}

但我收到一个错误:

Cannot convert value of type 'LazyMapSequence<LazyFilterSequence<LazySequence<[User]>.Elements>.Elements, String>' 
(aka 'LazyMapSequence<LazyFilterSequence<Array<User>>, String>') to expected argument type '[String]'

这是有道理的,因为现在朋友姓名数组将在以后延迟处理。我试图将视图模型结构转换为:

struct ItemViewModel: Hashable {
    let id: UUID
    let friendsName: LazyMapSequence<LazyFilterSequence<[User]>, String>
}

但是现在没有Hashable办法Hashable在使用LazyMapSequence<LazyFilterSequence<[User]>, String>as 类型时保持自动一致性ItemViewModel以及有关如何提高逻辑性能的任何提示

标签: iosswiftsequencelazy-sequences

解决方案


推荐阅读