【发布时间】:2014-12-07 18:47:14
【问题描述】:
这可能是非常通用的,而不是一般性的框架问题,而不是编程问题。但是,鉴于 Swift,以及您与 C API 交互的繁琐甚至有时不可能完成的任务,这个问题非常相关。
在为 iOS 构建新应用时,我发现使用地址簿框架确实很难。首先,对于许多 CoreFoundation 方法,您必须进行令人不舒服的指针传递。其次,这些函数大多返回那些丑陋的非托管对象,你必须弄清楚它们是否被保留(ARC 已经有好几年了!)。通过标识符访问属性非常麻烦,而且远非类型安全。最后,由于还没有 C 函数指针支持,你甚至不能调用 ABAddressBookRegisterExternalChangeCallback(addressBook: ABAddressBook!, callback: ABExternalChangeCallback, context: UnsafeMutablePointer<Void>),因为 ABExternalChangeCallback 到目前为止只在 Objective-C 中定义!
然后我发现Mac OS版本的AddressBookFramework中有一些不错的Objective-C Api。多么不公平! iOS 框架不是更年轻吗?你认为苹果为什么这样做?在您看来,他们什么时候会改变这一点?我是否遗漏了什么,iOS 也有 Objective-C Api 吗?
也欢迎任何关于如何以最方便、最美观的方式解决上述问题的建议!就我而言,我正在编写一个完整的包装器来掩盖所有讨厌的指针——C-Function——和全局常量的丑陋。准备好后,我会将其提交给 StackExchange 和 Github,让其他人受益并讨论我的解决方案。
编辑:终于设法将我的包装器上传到 GitHub。看 https://github.com/SocialbitGmbH/SwiftAddressBook
【问题讨论】:
标签: ios objective-c c swift abaddressbook