2016-05-04 10 views
5

ユーザーの連絡先の電話番号をすべて取得するコードがありますが、携帯電話番号のみを除外したいと考えています。以下に示すように、現在、私は、唯一の配列に「7」の「+」または二桁目の最初の数字と数字を追加することでこれをやっている:連絡先はとiPhoneに保存されているのでCNContactsを使用して迅速に携帯電話番号のみを取得するにはどうすればよいですか?

func findContacts() -> [CNContact]{ 
    let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),CNContactPhoneNumbersKey] 
    let fetchRequest: CNContactFetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch) 
    var contacts = [CNContact]() 
    CNContact.localizedStringForKey(CNLabelPhoneNumberiPhone) 
    fetchRequest.mutableObjects = false 
    fetchRequest.unifyResults = true 
    fetchRequest.sortOrder = .UserDefault 

    let contactStoreID = CNContactStore().defaultContainerIdentifier() 

    do { 

     try CNContactStore().enumerateContactsWithFetchRequest(fetchRequest) { (let contact, let stop) -> Void in 
      if contact.phoneNumbers.count > 0 { 
       contacts.append(contact) 
      } 
      if (contact.isKeyAvailable(CNContactPhoneNumbersKey)) { 
       for phoneNumber:CNLabeledValue in contact.phoneNumbers { 
        let number = phoneNumber.value as! CNPhoneNumber 
        print(number.stringValue) 
        let index = number.stringValue.startIndex.advancedBy(1) 
        let indexPlus = number.stringValue.startIndex.advancedBy(0) 
        if number.stringValue[index] == Character(String(7)) || number.stringValue[indexPlus] == Character("+"){ 
         self.allNumbers.append("\(number.stringValue)") 
        } 
       } 
      } 
     } 

"モバイル"ラベル、私はこれらの数字だけが配列に追加することができますかと思っていた。番号のラベルは、このようなモバイルあれば感謝:)

答えて

6

チェック:

var mobiles = [CNPhoneNumber]() 

for num in contact.phoneNumbers { 
    let numVal = num.value as! CNPhoneNumber 
    if num.label == CNLabelPhoneNumberMobile { 
     mobiles.append(numVal) 
    } 
} 

次に、あなたはその人のために携帯電話番号の配列を持っています。

+2

は '' "モバイル" をハードコードしないでください。 'CNLabelPhoneNumberMobile'または' CNLabelPhoneNumberiPhone'を使用してください。しかし、これはすべての携帯電話番号を取得しないことに留意してください。電話番号を追加するときにカスタムラベルを使用できます。誰かが間違って、あるいは他の多くの可能性によって実際に "家"のラベルを使用するかもしれません。または、ユーザが地上回線上で「モバイル」ラベルを使用する可能性があります。結局、与えられた数字が本当に携帯電話番号であることを確かめる方法はありません。 – rmaddy

0

より多くの訪問者のための別の方法:

for con in contacts 
{ 
    for num in con.phoneNumbers 
     { 
     if num.label == "_$!<Mobile>!$_" 
      { 
       self.contactNames.append(con.givenName) 
       self.contactNums.append(num.value.stringValue) 
        break 
         } 
     else 
      { 
        continue 
      } 
     } 

    } 
関連する問題