使用swift将mutlivalue条目推入数组

时间:2015-03-13 14:12:16

标签: swift

我有这段代码

    swiftAddressBook?.requestAccessWithCompletion({ (success, error) -> Void in
        if success {
            if let people = swiftAddressBook?.allPeople {
                for person in people {
                    println(person.phoneNumbers?.map( {$0.value} ))
                }
            }
        }
        else {
            //no success. Optionally evaluate error
        }
    })

基本上我想把每个电话号码都推到一个阵列中。

以上代码输出:

Optional(["+11111111111"])
Optional(["+11111111111"])
Optional(["(111) 111-111"])
Optional([" (111) 111-111"])
Optional(["+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111", "+11111111111"])
Optional(["+11111111111"])
Optional(["+11111111111"])
Optional(["(111) 111-111"])
我很好奇两件事。我可以添加到for循环中以将每个数字添加到我自己的数组中。另外,为什么一个Optional有50个数字..

1 个答案:

答案 0 :(得分:1)

假设你只想要一组非可选的电话号码,并且很乐意丢弃任何零电话号码(可能这种情况永远不会发生,SwiftAddressBook代码只需要消除这个选项,只返回空数组,这将是好多了):

        if success {
            var numbers: [String] = []

            if let people = swiftAddressBook?.allPeople {
                for person in people {
                    if let personNumbers = person.phoneNumbers {
                        numbers += personNumbers.map { number in
                            number.value
                        }
                    }
                }
            }

            // numbers is an array of all the numbers in the address book
            println(numbers)
        }

当您考虑使用地址簿时,一个可选项中包含多个数字的原因非常简单 - 人们可以拥有多个电话号码,因此person.phoneNumbers会返回一个数组。你正在提取“价值”属性,但也有一个“标签”属性(用于家庭,工作,移动等)。