ユーザーの連絡先の電話番号をすべて取得するコードがありますが、携帯電話番号のみを除外したいと考えています。以下に示すように、現在、私は、唯一の配列に「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)")
}
}
}
}
"モバイル"ラベル、私はこれらの数字だけが配列に追加することができますかと思っていた。番号のラベルは、このようなモバイルあれば感謝:)
は '' "モバイル" をハードコードしないでください。 'CNLabelPhoneNumberMobile'または' CNLabelPhoneNumberiPhone'を使用してください。しかし、これはすべての携帯電話番号を取得しないことに留意してください。電話番号を追加するときにカスタムラベルを使用できます。誰かが間違って、あるいは他の多くの可能性によって実際に "家"のラベルを使用するかもしれません。または、ユーザが地上回線上で「モバイル」ラベルを使用する可能性があります。結局、与えられた数字が本当に携帯電話番号であることを確かめる方法はありません。 – rmaddy