iOS Swift:按值对数组进行排序时,将字符串转换为浮点数的位置

AJG*_*elt -1 arrays sorting ios swift swift3

在 iOS Swift 中,我按照下面的代码按降序对数组进行排序。该代码工作正常,但是,'Price' 不是双精度数而是字符串(因此当前代码在是多位数字时会犯一些错误)。

如何在此单行排序函数中将字符串 'Price' 转换为双精度值?

OfferList.sort { $0.Price > $1.Price }
Run Code Online (Sandbox Code Playgroud)

我知道在将排序编写为多行循环时有办法做到这一点,但是有没有办法直接在上面的行中做到这一点?

cre*_*eak 5

Double有一个可以采用 a 的初始化程序,StringProtocol当然它返回 anOptional因为字符串实际上可能是也可能不是数字。为了将您的字符串排序为双打,您需要一个回退选项,以防它失败,否则,init如果您可以保证它们始终是双打,则需要强制解开这些s。选项如下所示:

//Fallback using a nil-coalescing operator
OfferList.sort { (Double($0.Price) ?? 0) > (Double($1.Price) ?? 0) }

//Force unwrapping
OfferList.sort { Double($0.Price)! > Double($1.Price)! }
Run Code Online (Sandbox Code Playgroud)

作为一个小的,不相关的,以驼峰命名命名对象的变量和属性被认为是最佳实践,例如offerList$0.price。当然,这不是必需的,但这是其他 Swift 开发人员所期望的。