我有这段代码
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个数字..
答案 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
会返回一个数组。你正在提取“价值”属性,但也有一个“标签”属性(用于家庭,工作,移动等)。