检查我的服务器上是否有 phone 个联系人

Check if phone number of contacts is on my server

我想检查在我的应用程序上注册并存储在我的服务器上的号码是否在该应用程序所在的设备上运行。 我试过了,但我真的不能从这里继续前进:

在我的 class 中,我声明:

var chatMatesArray: NSMutableArray = NSMutableArray()
var contactsName: NSMutableArray = NSMutableArray()
var users: NSMutableArray = NSMutableArray()
var phoneNumbers: NSMutableArray = NSMutableArray()

在我看来DidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
//I already have the permission to check AddressBook

var allNumbers: [AnyObject] = []
    let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
    let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord]
    for person in people {

        let phones: ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
        for j in 0..<ABMultiValueGetCount(phones) {
            let phone: String = ABMultiValueCopyValueAtIndex(phones, j).takeRetainedValue() as! String
            allNumbers.append(phone)
            self.phoneNumbers.addObject(allNumbers)
        }
    }
   }

然后我有一个函数可以从我的服务器检索号码,我将它们存储到数组 chatMatesArray 中,然后我尝试这样做:

let set1 = Set(arrayLiteral: self.chatMatesArray)
let set2 = Set(arrayLiteral: self.phoneNumbers)
self.users.addObject(set2.intersect(set1))

这会检查我的服务器和地址簿上的号码,对吗?但是我怎样才能从那个号码返回到他们的所有者全名,以便我可以在 UITableView 中显示?

在此先感谢您的帮助。

对于您的方法,您可以使用将 phone 号码映射到联系人的字典(尽管您可能会遇到冲突)。

但这确实不是 Swift 做事的方式。您应该考虑使用 mapfilter 来转换地址簿数据和 return 一组(不)符合您的条件的联系人。

如果您更喜欢原来的方法,那么快速枚举联系人列表以查找匹配项会更简单,而不是先进行集合交集,然后再将 phone 号码映射回联系人。