Это массив строк, и они сравниваются лексикографически :
"1" < "10" < "2" < ... < "9"
Например "10" < "2"
, потому что начальные символы уже
удовлетворить "1" < "2"
. (Подробности см. Например
Что означает, что сравнения строк и символов в Swift не чувствительны к локали? .)
Лучшим решением будет использование массива целых чисел:
let prodIDArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let maxId = prodIDArr.max()
print(maxId) // Optional(10)
Если это невозможно, вы можете применить числовое сравнение к
let prodIDArr = ["1","2","3","4","5","6","7","8","9","10"]
let maxId = prodIDArr.max(by: { $0.compare($1, options: .numeric) == .orderedAscending })
print(maxId) // Optional("10")