KNContacts
KNContacts是CNContacts的包装器,简化了对当前年龄和下个生日年龄、完整联系人姓名、创建联系簿(组)、排序以及创建联系人日程的访问。
更多信息
KNContacts框架包含一些类、结构和枚举,以便方便访问联系人、联系簿和联系人日程。
类型 | 名称 | 描述 |
---|---|---|
struct | KNContact | 为CNContact提供的包装结构,提供了访问辅助方法和原始联系人详情。 |
class | KNContactBook | 包含KNContacts的集合,具有添加、删除、排序和检索特定或随机元素的方法 |
struct | KNContactBookOrdering | 用于在KNContactBook中排序联系人的辅助排序方法 |
struct | KNContactsSchedule | 用于创建联系日程的字典包装器,可对特定时间使用自定义时间格式进行安排和检索 |
struct | KNDatesUtils | 日期格式化辅助方法 |
enum | KNTimeFormat | 包含预定义时间格式的枚举 |
文档
使用方法
示例初始化和用法
KNContact
和 KNContactBook
KNContact 是一个封装结构,您可以通过传入一个 CNContact 或 CNMutableContact 对象来初始化一个新的对象。KNContactBook 是一组 KNContact 对象,可以排序并提取随机元素。
import Contacts
import KNContacts
var contactBook = KNContactBook(id: "allContacts")
// Retrieve or create your CNContact list from a store - KNContacts does *not* handle authorisation for you.
// Make sure you have all necessary key descriptors.
var keys = [CNContactGivenNameKey, CNContactMiddleNameKey, CNContactFamilyNameKey,
CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactPhoneNumbersKey,
CNContactFormatter.descriptorForRequiredKeys(for: .fullName)] as! [CNKeyDescriptor]
let requestForContacts = CNContactFetchRequest(keysToFetch: keys)
do {
try CNContactStore().enumerateContacts(with: requestForContacts) { (cnContact, _) in
let knContact = KNContact(cnContact)
contactBook.add(knContact)
}
} catch let error {
// Handle error somehow!
print(error)
}
// And then perform actions on KNContactBook
let randomContacts = contactBook.randomElements(number: 1)
let randomElements = contactBook.randomElements(number: 3, except: randomContacts)
randomElements.forEach({ (contact) in
print(contact.fullName(format: .fullName))
if (contact.isBirthdayToday()) {
print("It's their birthday today!")
} else if (contact.isBirthdayComing(in: 7)) {
print("Birthday coming up in the next week!")
} else {
print("Birthday on \(contact.formatBirthday())")
}
})
KNContactsSchedule
、KNContactBookOrdering
、KNDatesUtils
KNContact 还可以返回有序的元素数组。在 KNContactBookOrdering 中提供了两种选项,但 KNDatesUtils 提供了对字符串日期格式化器的简单访问。
let order = KNContactBookOrdering.thisYearsBirthday
let contactsSortedByBirthday = contactBook.contacts.sorted(by: order)
// And finally schedules can be created for easier retrieval at a later date.
var thisWeeksBirthdaySchedule = KNContactsSchedule(name: "birthdaysThisYear")
for numberOfDays in 1...7 {
let birthdayList = contactsSortedByBirthday.filter({ $0.isBirthdayComing(in: numberOfDays) }).map({ $0.id })
let date = Calendar.current.date(byAdding: .day, value: numberOfDays, to: Date())!
let dateString = KNDatesUtils.formatter(with: .fullDate).string(from: date)
thisWeeksBirthdaySchedule.add(list: birthdayList, to: dateString)
}
// And retrieve schedule by date
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: Date())!
let schedule = thisWeeksBirthdaySchedule.getSchedule(for: tomorrow)
需求
KNContacts 版本 | Swift 版本 | 支持的包管理器 |
---|---|---|
从 v1.3.0 开始 |
Swift 5.0 | Swift Package Manager, Cocoapods |
从 v1.2.0 开始 |
Swift 5.0 | Cocoapods |
至 v1.1.1 |
Swift 4.2 | Cocoapods |
使用方法
KNContacts 目前可以通过 cocoaPods 和 Swift Package Manager 使用。只需将此代码片段添加到 podfile 中即可使用最新版本。
CocoaPods
pod 'KNContacts'
或指定所需版本。
pod 'KNContacts', '~> 1.0.0'
Swift Package Manager
一旦设置好 SPM,将此包添加到依赖中。自 1.3.0 版本开始支持 SPM。
dependencies: [
.package(url: "https://github.com/dragosrobertn/KNContacts.git", .upToNextMajor(from: "1.3.0"))
]
使用 KNContacts 的应用程序
如果您的应用使用 KNContacts,请随时提交 Pull Request。
贡献
欢迎提交 Pull Request,所有更改都应附带测试和通过构建。
欢迎提出问题或功能请求,请随意自己创建实现。该框架的开发使用基于树干的开发策略,因此请针对主分支创建 Pull Request,并确保构建通过。