我是Swift的新开发人员。我正在使用Swift 4.2和XCode 10.1。
我确定这并不难,但是我搜索了两天,并尝试了许多不同的方法来确定{{1}的数组中是否存在contactID
和phoneNumber
的组合},这是具有这两个变量的结构模型。
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
}
数组中contactID
和favoriteNumber
的组合的最佳方法是什么?另外,当我找到一个匹配项时,我需要引用数组中的那个Favorites
,以便如果用户Favorite
的号码可以删除它。
答案 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
}