我是一名新的Swift开发人员。我使用的是Swift 4.2和XCode 10.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
(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
数组中favoriteNumber
和Favorites
组合的最佳方法是什么?此外,当我找到匹配时,我需要在数组中引用该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
}