从联系人获取街道地址 Swift
Get Street Address From Contact Swift
我创建了一个应用程序,用户可以 select 联系然后获取姓名、生日和街道地址。
我可以获取并显示姓名和生日。但我无法获取街道地址
这是我的代码
@IBOutlet weak var names: UILabel!
@IBOutlet weak var birthday: UILabel!
@IBOutlet weak var address: UILabel!
var storeNames = ""
var storeBirthday = ""
var storeAddress = CNLabeledValue()
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
names.text = storeNames
birthday.text = storeBirthday
address.text = String(storeAddress)
}
func getDateStringFromComponents(dateComponents: NSDateComponents) -> String! {
if let date = NSCalendar.currentCalendar().dateFromComponents(dateComponents) {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
let dateString = dateFormatter.stringFromDate(date)
return dateString
}
return nil
}
@IBAction func showContacts(sender: AnyObject) {
let contactPickerViewController = CNContactPickerViewController()
contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "birthday != nil")
contactPickerViewController.delegate = self
presentViewController(contactPickerViewController, animated: true, completion: nil)
}
func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
storeNames = contact.givenName //Get Names
if let bday = contact.birthday?.date as NSDate! {
let formatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(name: "UTC")
formatter.dateFormat = "dd/MM/yyyy"
let stringDate = formatter.stringFromDate(contact.birthday!.date!)
//Their birthday as a String:
storeBirthday = stringDate //Get Birthday
}
storeAddress = contact.postalAddresses[0]
print(storeAddress)
}
它打印成这样
<CNLabeledValue: 0x7fca63c12780: identifier=150C06A9-8008-4496-B27A- CE2648622793, label=_$!<Work>!$_, value=<CNPostalAddress: 0x7fca63c0dce0: street=165 Davis Street, city=Hillsborough, state=CA, postalCode=94010, country=, countryCode=us, formattedAddress=(null)>>
2016-12-08 19:35:09.920 Birthdays[638:9739] plugin com.apple.MobileAddressBook.ContactsViewService invalidated
抱歉,我不知道如何获取街道地址
您必须转换 storeAddress
的值,它是一个具有您需要的属性的 CNPostalAddress
对象
if let address = storeAddress.value as? CNPostalAddress {
let city = address.city
...
}
我发现将地址解析为单个字符串的最简单方法如下:
let emailAddress = contact.emailAddresses.count > 0 ? contact.emailAddresses[0].value : ""
let address = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.street)" : ""
let city = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.city)" : ""
let state = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.state)" : ""
let zipCode = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.postalCode)" : ""
let country = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.country)" : ""
我得到这样的值:
contact.postalAddresses[0].value.street
我创建了一个应用程序,用户可以 select 联系然后获取姓名、生日和街道地址。 我可以获取并显示姓名和生日。但我无法获取街道地址
这是我的代码
@IBOutlet weak var names: UILabel!
@IBOutlet weak var birthday: UILabel!
@IBOutlet weak var address: UILabel!
var storeNames = ""
var storeBirthday = ""
var storeAddress = CNLabeledValue()
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
names.text = storeNames
birthday.text = storeBirthday
address.text = String(storeAddress)
}
func getDateStringFromComponents(dateComponents: NSDateComponents) -> String! {
if let date = NSCalendar.currentCalendar().dateFromComponents(dateComponents) {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
let dateString = dateFormatter.stringFromDate(date)
return dateString
}
return nil
}
@IBAction func showContacts(sender: AnyObject) {
let contactPickerViewController = CNContactPickerViewController()
contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "birthday != nil")
contactPickerViewController.delegate = self
presentViewController(contactPickerViewController, animated: true, completion: nil)
}
func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
storeNames = contact.givenName //Get Names
if let bday = contact.birthday?.date as NSDate! {
let formatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(name: "UTC")
formatter.dateFormat = "dd/MM/yyyy"
let stringDate = formatter.stringFromDate(contact.birthday!.date!)
//Their birthday as a String:
storeBirthday = stringDate //Get Birthday
}
storeAddress = contact.postalAddresses[0]
print(storeAddress)
}
它打印成这样
<CNLabeledValue: 0x7fca63c12780: identifier=150C06A9-8008-4496-B27A- CE2648622793, label=_$!<Work>!$_, value=<CNPostalAddress: 0x7fca63c0dce0: street=165 Davis Street, city=Hillsborough, state=CA, postalCode=94010, country=, countryCode=us, formattedAddress=(null)>>
2016-12-08 19:35:09.920 Birthdays[638:9739] plugin com.apple.MobileAddressBook.ContactsViewService invalidated
抱歉,我不知道如何获取街道地址
您必须转换 storeAddress
的值,它是一个具有您需要的属性的 CNPostalAddress
对象
if let address = storeAddress.value as? CNPostalAddress {
let city = address.city
...
}
我发现将地址解析为单个字符串的最简单方法如下:
let emailAddress = contact.emailAddresses.count > 0 ? contact.emailAddresses[0].value : ""
let address = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.street)" : ""
let city = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.city)" : ""
let state = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.state)" : ""
let zipCode = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.postalCode)" : ""
let country = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.country)" : ""
我得到这样的值:
contact.postalAddresses[0].value.street