首页 > 解决方案 > swiftUI array.first(其中:不使用结构/类数组

问题描述

我正在尝试使用此代码在数组中查找字符串;

var userArray = [UserItem]()

var foundUser: String {
    guard let findUser = userArray.first(where: { $0 == item.name }) else { return "Not found" }
    return findUser
}

但我收到以下错误消息;“无法将 '(String) -> Bool' 类型的值转换为预期的参数类型 '(UserList) throws -> Bool'”

所以我尝试添加一个标准数组;

var userArray = ["1", "Gale Dyer", "3", "4"]

并摆脱了我想要的错误和结果。

我认为这是因为我的结构或类不符合字符串,但我不确定如何解决这个问题,因为添加“,字符串”似乎不是答案。

此处参考其他数据;

struct UserItem: Codable, Identifiable {
    var id: String
    var isActive: Bool
    var name: String
    var age: Int
    var company: String
    var email: String
    var address: String
    var about: String
//    var registered: Date
    var tags: [String]
    var friends: [Friend]
}

struct Friend: Codable {
    var id: String
    var name: String
}

class UserList: ObservableObject {
    @Published var items = [UserItem]()
        {
        didSet {
            let encoder = JSONEncoder()
            if let encoded = try? encoder.encode(items) {
                UserDefaults.standard.set(encoded, forKey: "Items")
            }
        }
    }
    init() {
        if let items = UserDefaults.standard.data(forKey: "Items") {
            let decoder = JSONDecoder()
            if let decoded = try? decoder.decode([UserItem].self, from: items) {
                self.items = decoded
                return
            }
        }

        self.items = []
    }
    
}

先感谢您

标签: arraysclassstructswiftuiwhere-clause

解决方案


您必须在方法的闭包中检查相同的类型first(where:)。这是修复。

var foundUser: String {
    guard let findUser = userArray.first(where: { $0.name == item.name })?.name else { return "Not found" }
    return findUser
}

推荐阅读