在两个维度上搜索二维数组以进行匹配 - Swift

问题描述 投票:0回答:1

我是一名新的Swift开发人员。我使用的是Swift 4.2和XCode 10.1。

我确信这并不难,但我已经搜索了两天并尝试了许多不同的方法来确定contactIDphoneNumber的组合是否存在于Favorites数组中,这是一个带有这两个变量的结构模型。

struct Favorite {
    var favoriteNumber:String
    var contactID:String
}

我有一个contactID,我有一个phoneNumber,我需要搜索Favorites数组,看看是否有一个Favorite有这两个字符串。 Favorites阵列保存在UserDefaults。这是初始化器:

// Set an empty array of Favorites on the first save of the user.
    defaults.set([Favorite](), forKey: Constants.LocalStorage.storedFavorites)

我尝试用我的数字创建一个Favorite来检查,然后在阵列上运行.contains(where)。像这样:

// Make a Favorite with the contact ID and phone number passed in
    var checkContact = Favorite(favoriteNumber:phoneNumber.description, contactID:contact.contactDetails.identifier)

但我一直在Xcode中遇到无法解决的错误。这是我的最新代码不起作用(来自Apple文档)。这个给出了在布尔上下文中使用=的错误(这直接来自Apple文档示例),但即使我将其更改为==,它也会产生另一个错误,即==无法应用于两个收藏夹操作数。

let isAFavorite = user?.favorites!.contains { element in
        if checkContact = element {
            return true
        } else {
            return false
        }

所以我被卡住了。使用Swift 4检查contactID数组中favoriteNumberFavorites组合的最佳方法是什么?此外,当我找到匹配时,我需要在数组中引用该Favorite,以便我可以删除它,如果用户unFavorites数字。

ios arrays swift
1个回答
1
投票

所有匹配都需要一个过滤器

let isAFavorites = user?.favorites?.filter { $0 == checkContact } ?? []

或者是第一次打击

if let item = user?.favorites?.first(where:{ $0 == checkContact }) {
   ///
}

struct Favorite : Equatable {
    var favoriteNumber:String
    var contactID:String
}
© www.soinside.com 2019 - 2024. All rights reserved.