2016-01-06 48 views
0

我想檢查在我的應用程序上註冊並存儲在我的服務器上的號碼是否在運行該應用程序的設備上。 我試過,但我真的不能從這裏往前走:檢查聯繫人的電話號碼是否在我的服務器上

在我的課堂我宣佈:

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

在我viewDidLoad中:

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) 
     } 
    } 
    } 

然後,我有一個FUNC那從我的服務器檢索號碼,我將它們存儲到陣列chatMatesArray然後我嘗試去做:

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

這將檢查我的服務器和地址簿上的數字,對嗎?但是,我怎麼能從這個數字回到他們的主人的全名,以便我可以在UITableView中顯示?

在此先感謝您的幫助。

回答

0

對於您的方法,您可以使用將電話號碼映射到聯繫人的字典(儘管您可能有碰撞)。

但這真的不是Swift的做事方式。您應該考慮使用mapfilter來轉換地址簿數據並返回(不符合)標準的聯繫人集。

如果你喜歡原來的做法,它會更簡單快速通過聯繫人查找匹配,而不是做交集,然後還要將電話號碼映射回聯繫人列表枚舉。

+0

謝謝,你有一些與我的情況下使用地圖和過濾器的例子的鏈接? – Francesco

+0

@FrancescoVezzoli http://stackoverflow.com/q/25715780/4151918 –

+1

@FrancescoVezzoli這裏的[一個ABAddressBook包裝(https://github.com/SocialbitGmbH/SwiftAddressBook),其含有地圖和過濾器的示例。 –

相關問題