如何在Swift中放入Array的第一个和最后一个元素

Win*_*ngs 7 arrays ios swift

我有这样的字典

["Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]]
Run Code Online (Sandbox Code Playgroud)

现在我将所有字典值存储在这样的数组中

var priceRange: [String] = [String]()
if let obj = currentFilters["Price"] as? [String] {
        self.priceRange = obj
        printD(self.priceRange)
    }
Run Code Online (Sandbox Code Playgroud)

通过使用Array.firstArray.last方法,我将得到我的数组的第一个元素和最后一个元素的值.

let first = priceRange.first ?? "" // will get("[$00.00 - $200.00]")
let last = priceRange.last ?? ""   // will get("[$600.00 - $800.00]")
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是我想要的$ 00.00,从第一$ 800去年作出的所需组合[$点- $ 800.00] .

我怎样才能做到这一点.请帮忙?

few*_*ode 4

您需要先获取firstvalue ( "$00.00 - $200.00"),然后获取lastvalue ( "$600.00 - $800.00"),然后用“ -”符号将它们分开,并分别获取第一个和最后一个值,并将其组合为单个字符串。

let currentFilters = ["Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]]

var priceRange: [String] = [String]()
if let obj = currentFilters["Price"] as? [String] {
    priceRange = obj
    print(priceRange)
}

let first = priceRange.first!.split(separator: "-").first!
let last = priceRange.last!.split(separator: "-").last!

let range = "\(first) - \(last)"
Run Code Online (Sandbox Code Playgroud)

为了更好地处理选项,你可以使用这个(注意,我遵循我的过度描述性编码风格。这个代码可以更紧凑)

func totalRange(filters: [String]?) -> String? {
    guard let filters = filters else { return nil }
    guard filters.isEmpty == false else { return nil }
    guard let startComponents = priceRange.first?.split(separator: "-"), startComponents.count == 2 else {
        fatalError("Unexpected Filter format for first filter") // or `return nil`
    }
    guard let endComponents = priceRange.last?.split(separator: "-"), endComponents.count == 2 else {
        fatalError("Unexpected Filter format for last filter") // or `return nil`
    }
    return "\(startComponents.first!) - \(endComponents.last!)"
}
let range = totalRange(filters: currentFilters["Price"])

let range1 = totalRange(filters: currentFilters["Not Exists"])
Run Code Online (Sandbox Code Playgroud)

将上面的代码传递到游乐场。它可以写得更短,但为了描述性我保持这样

  • 如果您的字典为空,我的代码将使您的应用程序崩溃:)。它旨在演示如何实现所需的行为。可选值处理是进一步实现的主题。 (2认同)