KNContacts 1.3.0

KNContacts 1.3.0

dragosrobertn维护。



KNContacts

Cocoapods CI codecov codebeat badge contributions

KNContacts是CNContacts的包装器,简化了对当前年龄和下个生日年龄、完整联系人姓名、创建联系簿(组)、排序以及创建联系人日程的访问。

更多信息

KNContacts框架包含一些类、结构和枚举,以便方便访问联系人、联系簿和联系人日程。

类型 名称 描述
struct KNContact 为CNContact提供的包装结构,提供了访问辅助方法和原始联系人详情。
class KNContactBook 包含KNContacts的集合,具有添加、删除、排序和检索特定或随机元素的方法
struct KNContactBookOrdering 用于在KNContactBook中排序联系人的辅助排序方法
struct KNContactsSchedule 用于创建联系日程的字典包装器,可对特定时间使用自定义时间格式进行安排和检索
struct KNDatesUtils 日期格式化辅助方法
enum KNTimeFormat 包含预定义时间格式的枚举

文档

您可以在这里查看完整文档。

使用方法

示例初始化和用法

KNContactKNContactBook

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())")
    }
})

KNContactsScheduleKNContactBookOrderingKNDatesUtils

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,并确保构建通过。

许可证

此库使用 MIT 许可证.