Если я правильно вас понимаю, это может быть комбинация строковой интерполяции и динамического поиска члена:
Строковая интерполяция
Например, в Swift вы можете вставлять выражения в код:
"This is \(getAdjective(), uppercasing: true) !"
эквивалентно
"This is ".append(getAdjective(), uppercasing: true).append(" !")
Определив метод append
для String
, который принимает дополнительные параметры (в данном случае логический uppercasing:
) или принимает другой первый аргумент, вытаким образом, можно позволить людям расширять этот синтаксис заполнителя.
Вы также можете реализовать метод, который возвращает строку, чтобы вы могли использовать этот метод внутри \(...)
.
Важной частью здесь является то, чтоэто синтаксис для встраивания выражений в строки, детали того, как Swift реализует его (append
метод в String
- это просто то, как это делает Swift, а не как должна быть интерполяция строк.
Динамический поиск членов
В Swift класс может определять функцию, которая вызывается при обращении к члену, который не существует как свойство или функция:
@dynamicMemberLookup class MyClass {
var dictionary: [String: String]
subscript(dynamicMember: String) -> String {
return dictionary[dynamicMember] ?? ""
}
}
Это позволяет вам динамически создавать свои собственные переменные. Когда вы пишете
let foo = MyClass()
let myString = foo.bar
, компилятор просто генерирует код для
let foo = MyClass()
let myString = foo.subscript(dynamicMember: "bar")
, это то, о чем вы думаете?