首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从联络人Swift处获得街道地址

从联络人Swift处获得街道地址
EN

Stack Overflow用户
提问于 2016-12-08 12:47:05
回答 2查看 2.4K关注 0票数 4

我创建了一个应用程序,用户可以选择联系人,然后得到姓名,生日,和街道地址。我可以得到和显示姓名和生日。但我找不到街道地址

这是我的密码

代码语言:javascript
复制
@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

对不起,我不知道怎么知道街道地址

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-08 13:31:49

您必须转换您的storeAddress的值--它是一个具有所需属性的CNPostalAddress对象。

代码语言:javascript
复制
if let address = storeAddress.value as? CNPostalAddress {

   let city = address.city
   ...
}
票数 4
EN

Stack Overflow用户

发布于 2017-07-18 15:40:33

我找到的将地址解析为单个字符串的最简单方法如下:

代码语言:javascript
复制
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)" : ""

我得到了这样的价值:

代码语言:javascript
复制
contact.postalAddresses[0].value.street
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41039896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档