8802


某S社の本を見ながら、アドレス帳を作っているのですが、並び方があいうえお順ではなく、ばらばらなのでソートをしたいのですが、分かりません。すみませんがどなたかお知恵を拝借できないでしょうか？

Objective-Cの場合は下記方法で名前でソートできていたのですが、

[code]

    ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL); 
    
    CFArrayRef records = ABAddressBookCopyArrayOfAllPeople(book); 
    
    CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(kCFAllocatorDefault, 
     CFArrayGetCount(records), records); 
    
    CFArraySortValues(peopleMutable, CFRangeMake(0, CFArrayGetCoun(peopleMutable)), 
     (CFComparatorFunction)ABPersonComparePeopleByName,
     (void*)ABPersonGetSortOrdering()); 
    
[/code]

同様にswiftで下記のように記述するとエラーが出ます。

[code]

    var book : ABAddressBook = ABAddressBookCreateWithOptions(nil,nil).takeUnretainedValue() 
    
    let records : NSArray = ABAddressBookCopyArrayOfAllPeople(book).takeUnretainedValue() 
    
    var peopleMutable : CFMutableArray = CFArrayCreateMutableCopy(kCFAllocatorDefault,
     CFArrayGetCount(records), records) 
    
    let loc : CFIndex = 0 
    
    var len : CFIndex = CFArrayGetCount(peopleMutable) 
    
    CFArraySortValues(peopleMutable, CFRangeMake(loc, len), 
     CFComparatorFunction : ABPersonComparePeopleByName , ABPersonGetSortOrdering() ) 
    
[/code]

CFArraySortValuesの記述が悪いことは分かっているのですが、どこを直したら良いか分かりません。

どなたかご教授ください。


CC BY-SA 3.0
2015-04-05T10:23:36.630
8788
2015-04-05T19:27:18.183
2015-04-05T10:26:26.273
3639
9173
question
swift xcode
アドレス帳を作りたいのですが、順番がばらばらで、あいうえお順にソートしたい


`CFArraySortValues`は関数ポインタを引数に渡す必要があり、Swiftで扱うのは大変なので、`NSMutableArray`の`sortUsingComparator`メソッドを使うと簡単です。

例えば、`CFArraySortValues`以下を次のように書き換えます。

[code]

    let peopleArray = peopleMutable as NSMutableArray
    
    peopleArray.sortUsingComparator({ (person1, person2) -> NSComparisonResult in
        var result = ABPersonComparePeopleByName(person1, person2, ABPersonGetSortOrdering())
        return NSComparisonResult(rawValue: result.rawValue)!
    })
    
[/code]


CC BY-SA 3.0
2015-04-05T19:27:18.183
8802
2015-04-05T19:27:18.183
5519
8788
answer