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



我是新的Swift开发人员。我正在使用Swift 4.2和Xcode 10.1。

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

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

我有一个contactID,我有一个phoneNumber,我需要搜索Favorites的数组,以查看是否有一个具有这些精确的两个字符串的FavoriteFavorites的数组保存在UserDefaults中。这是一个初始化器:

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

我尝试使用我的数字来检查Favorite,然后在数组上运行.contains(其中)。这样:

// 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 Documentation示例),但是即使我将其更改为==,也会出现另一个错误,即==不能将其应用于两个喜欢的操作数。

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

所以我被卡住了。使用SWIFT 4检查FavoritescontactIDfavoriteNumber组合的最佳方法是什么?另外,当我找到匹配项时,我需要在数组中对该Favorite的引用,因此如果用户unFavorites数字。

您需要所有匹配的过滤器

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
}

最新更新