Получить конкретное значение из объекта Array в Swift - PullRequest
0 голосов
/ 11 мая 2019

Я хочу получить значение идентификатора транзакции из этого массива.

Вот мой массив ::

["{
transaction_id:1894934,
 pin:0534552925794805, 
serial:20236031783146920986
}",
 "{transaction_id:1894935,
 pin:0665208961850777,
 serial:20236031783146920987}"]

Как я могу получить значение идентификатора транзакции из этого ??Кажется, что объекты в массиве и мои значения хранятся в этом формате, так как я могу получить конкретное значение?

1 Ответ

1 голос
/ 11 мая 2019

Это довольно необычный формат, массив псевдо-строк JSON.Псевдо, поскольку они недопустимы, ключи должны быть заключены в двойные кавычки.

Возможное решение - извлечь значения для transaction_id с помощью Scanner

let array = ["{transaction_id:1894934,pin:0534552925794805,serial:20236031783146920986}","{transaction_id:1894935,pin:0665208961850777,serial:20236031783146920987}"]

let identifiers = array.compactMap{ string -> Int? in
    let scanner = Scanner(string: string)
    var value = 0
    guard scanner.scanCharacters(from: CharacterSet.decimalDigits.inverted, into: nil),
        scanner.scanInt(&value) else { return nil }
    return value
}

print(identifiers)

Для преобразованиястрока в словаре использует регулярное выражение

let transactions = array.map{ string -> [String:String] in
    let regex = try! NSRegularExpression(pattern: "(\\w+):(\\d+)")
    var result = [String:String]()
    let matches = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
    for match in matches {
        let keyRange = Range(match.range(at: 1), in: string)!
        let valueRange = Range(match.range(at: 2), in: string)!
        result[String(string[keyRange])] = String(string[valueRange])
    }
    return result
}
...