搜索二维数组以查找两个维上的匹配项-Swift

时间:2019-03-22 15:17:28

标签: ios arrays swift

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

我确定这并不难,但是我搜索了两天,并尝试了许多不同的方法来确定{{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

但是我一直在Xcode中遇到无法解决的错误。这是我最新的无效代码(来自Apple文档)。这个错误给出了关于在布尔上下文中使用// Make a Favorite with the contact ID and phone number passed in var checkContact = Favorite(favoriteNumber:phoneNumber.description, contactID:contact.contactDetails.identifier) 的错误(直接来自Apple文档示例),但是即使我将其更改为=,它也会产生另一个错误,==无法应用于两个收藏夹操作数。

==

所以我被困住了。使用Swift 4检查let isAFavorite = user?.favorites!.contains { element in if checkContact = element { return true } else { return false } 数组中contactIDfavoriteNumber的组合的最佳方法是什么?另外,当我找到一个匹配项时,我需要引用数组中的那个Favorites,以便如果用户Favorite的号码可以删除它。

1 个答案:

答案 0 :(得分: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
}