I can repro an exception with this code:
var names1=["INCOMPLETE PROFILE","UNVERIFIED PROFILE","SALLY CHEN","UNIT TEST","TEST CUSTOMER","LITTLE SHOES","UNVERIFIED PROFILE","UNVERIFIED PROFILE","桃太郎","PAUL'S IDEA","アンパンマン",
"TEST CUSTOMER","JIM'S CLONE","TEST CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","SAME DOUBLE CARD CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","ECARD LIMIT BEFORE VERIFYING","SAME DOUBLE CARD CUSTOMER","EXPIRY DATE CUSTOMER",
"EXPIRY DATE CUSTOMER","見張粗末","EXPIRY DATE CUSTOMER","TEST CUSTOMER","TEST","TEST","TEST","RESPONDER","RESPONDER","RESPONDER","RESPONDER","RESPONDER","UNIT TEST","BLUECHAIN","TEST CUSTOMER","UNVERIFIED PROFILE",
"UNVERIFIED PROFILE","UNVERIFIED PROFILE","WEB PAYMENT TEST","TEST CUSTOMER","LITTLE SHOES","UNVERIFIED PROFILE","UNVERIFIED PROFILE","TEST CUSTOMER","LITTLE SHOES","UNVERIFIED PROFILE","UNVERIFIED PROFILE",
"SALLY CHEN","SALLY CHEN","UNVERIFIED PROFILE","UNVERIFIED PROFILE","UNVERIFIED PROFILE","UNIT TEST","TEST CUSTOMER","LITTLE SHOES","UNVERIFIED PROFILE","UNVERIFIED PROFILE","桃太郎","PAUL'S IDEA","アンパンマン",
"TEST CUSTOMER","JIM'S CLONE","TEST CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","SAME DOUBLE CARD CUSTOMER","LITTLE SHOES","TEST CUSTOMER","UNVERIFIED PROFILE","TEST CUSTOMER","UNVERIFIED PROFILE",
"ECARD LIMIT BEFORE VERIFYING","SAME DOUBLE CARD CUSTOMER","EXPIRY DATE CUSTOMER","EXPIRY DATE CUSTOMER","見張粗末","EXPIRY DATE CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","TEST CUSTOMER","TEST","TEST","BLUECHAIN",
"TEST CUSTOMER","UNVERIFIED PROFILE","UNVERIFIED PROFILE","UNVERIFIED PROFILE","UNVERIFIED PROFILE","TESTB CUSTOMERB","TESTB CUSTOMERB","TESTA CUSTOMERA","TESTB CUSTOMERB","TESTA CUSTOMERA","TESTC CUSTOMERC",
"BLUECHAIN","BLUECHAIN","RESPONDER","RESPONDER","RESPONDER","RESPONDER","RESPONDER","UNIT TEST","UNVERIFIED PROFILE","INCOMPLETE PROFILE","UNVERIFIED PROFILE","UNVERIFIED PROFILE","INCOMPLETE PROFILE","UNVERIFIED PROFILE",
"UNVERIFIED PROFILE","Q Q"]
names1.sort() { $0 < $1 }
it gives a
!> Fatal exception of type java.lang.IllegalArgumentException on thread 0001 ()
!> Message: java.lang.IllegalArgumentException: Comparison method violates its general contract!
I’m guessing this is related to how the underlying java.util.ArrayList
class expects three states of comparison (less, greater or equal), but the Swift API only accounts for “less” and “not less”, basically:
public mutating func sort(by isOrderedBefore: (T, T) -> Bool) {
makeUnique()
#if JAVA
java.util.Collections.sort(list, class java.util.Comparator<T> { func compare(a: T, b: T) -> Int32 {
if isOrderedBefore(a,b) {
return 1
} else {
return -1
}
}})
I suppose we’ll need to rework this and replace it with a custom sort algorithm, in Swift Base Library…