6

ユーザーの連絡先のすべての電話番号を取得するコードがありますが、携帯電話番号のみを除外したいと考えています。現在、以下に示すように、最初の数字が「+」または2番目の数字が「7」の数字を配列に追加するだけでこれを行っています。

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

連絡先は「モバイル」ラベルの付いた iPhone に保存されているため、これらの番号だけを配列に追加できるかどうか疑問に思っていました。ありがとう :)

4

3 に答える 3

0

それを行うためのより良い方法は、 と を使用するこの投稿に記載されていflatMapますcontains迅速なネストされたフィルターの最適化?

于 2017-02-14T03:03:11.090 に答える