我是新的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
(其中)。这样:
// 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检查Favorites
中contactID
和favoriteNumber
组合的最佳方法是什么?另外,当我找到匹配项时,我需要在数组中对该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
}