Восстановить интерполяцию строки ПОСЛЕ замены значения - PullRequest
1 голос
/ 13 июня 2019

С учетом str: "My name is Gustavo", который был создан с "My name is \(foo.name)"

Можно ли получить строку "My name is \(foo.name)" после замены значения?


Другими словами, можно ли узнать "My name is \(foo.name)", имея "My name is Gustavo"?


Редактировать : Если я смогу добраться до "My name is ", то есть жестко закодированной строки из всех строк, которые были построены динамически, это было бы решением.

1 Ответ

3 голосов
/ 13 июня 2019

Нет, это невозможно.На самом деле "My name is \(foo.name)" даже не включен в скомпилированный код.Вместо этого компилятор Swift-5 генерирует код, эквивалентный следующему:

let str = String(stringInterpolation: {
    var temp = String.StringInterpolation(literalCapacity: 11, interpolationCount: 1)
    temp.appendLiteral("My name is ")
    temp.appendInterpolation(foo.name)
    return temp
}())

Эта статья содержит подробности о том, как интерполяция строк реализована в Swift-4 и Swift-5.

...