【发布时间】:2014-09-07 23:42:06
【问题描述】:
我有一个用 Swift 编写的应用程序,它从用户的通讯录中提取联系人。
我想过滤掉仅包含公司名称的联系人(以便您获得“假定的”真实联系人而不是企业)
这是在我的应用程序的 Objective-C 版本中如何实现的:
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id person, NSDictionary *bindings) {
NSString *firstName = CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonFirstNameProperty));
NSString *lastName = CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonLastNameProperty));
return (firstName || lastName);
}];
NSArray *peopleNotCompanies = [allContacts filteredArrayUsingPredicate:predicate];
这很完美,所以这是我在 Swift 中的尝试:
var contactList: NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue()
var predicate: NSPredicate = NSPredicate { (AnyObject person, NSDictionary bindings) -> Bool in
var firstName: String = ABRecordCopyValue(person as ABRecordRef, kABPersonFirstNameProperty).takeRetainedValue() as String
var lastName: String = ABRecordCopyValue(person as ABRecordRef, kABPersonLastNameProperty).takeRetainedValue() as String
return firstName || lastName
})
现在这有几个问题。我在 return 语句和谓词调用结束时收到这些错误:
如何在我的 Swift 中的 ObjC 代码中提供类似的功能?或者有没有更好的方法来快速检查联系人是否只有公司名称,然后从最终数组中省略它?
谢谢!
【问题讨论】:
标签: ios swift abaddressbook