Tôi có một ứng dụng được viết bằng Swift đang kéo người liên hệ của người dùng từ sổ địa chỉ của họ.Mảng lọc Swift sử dụng NSPredicate
Tôi muốn lọc ra sự tiếp xúc chỉ chứa tên công ty (để bạn có được của bạn "giả định" người thật xúc và không phải doanh nghiệp)
Sau đây là cách này đang được thực hiện trong phiên bản Objective-C các ứng dụng của tôi:
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];
này hoạt động hoàn hảo, vì vậy đây là nỗ lực của tôi để làm điều này trong 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
})
Bây giờ này có một vài vấn đề. Tôi nhận được những lỗi trên báo cáo kết quả lợi nhuận và kết thúc cuộc gọi vị:
Làm thế nào tôi có thể cung cấp chức năng tương tự như tìm thấy trong mã ObjC tôi trong Swift? Hoặc là có một cách tốt hơn trong nhanh chóng để kiểm tra xem một số liên lạc có chỉ một tên công ty và sau đó bỏ qua nó từ mảng cuối cùng?
Cảm ơn!
Nếu bạn sử dụng NSArray thay vì Array, bạn có thể thực hiện dòng mã sau: let filtersContacts: NSArray = contactList.filteredArrayUsingPredicate (predicate) –
Cảm ơn bạn đã làm rõ, phần bổ sung) đã thực sự ném tôi đi vì tôi không chú ý nó! –