Я пытаюсь переписать стандартный метод String (формат, аргументы), найденный в фундаменте, который принимает строку и заменяет все значения, содержащие% i, на int и% @ на строки и целый ряд типов. https://developer.apple.com/documentation/swift/string/3126742-init
Поскольку я не знаю c Я преобразовал инициализатор из
init(format: String, _ arguments: CVarArg) {
в
init(format: String, _ arguments: [Any]) {
Теперь я заставил его работать для Ints, используя это в String Extension
init(format: String, _ arguments: [Any]) {
var copy = format
for argument in arguments {
switch argument {
case let replacementInt as Int:
String.handleInt(copy: ©, replacement: String(replacementInt))
default:
self = format
}
}
self = copy
}
private static func handleInt(copy: inout String, replacement: String) {
, но так как я хотел бы, чтобы это работало для всех значений, я пытаюсь использовать переключатель для поиска типа Any, у которого есть протокол LosslessStringConvertible требуется преобразовать в строку с помощью инициализатора String (значение).
init(format: String, _ arguments: [Any]) {
var copy = format
for argument in arguments {
switch argument {
case let replacementInt as LosslessStringConvertible:
String.handleAnyValue(copy: ©, replacement: String(replacementInt))
default:
self = format
}
}
self = copy
}
Однако при применении String (replaceInt)
типа протокола 'LosslessStringConvertible' появляется следующая ошибка не может соответствовать 'LosslessStringConvertible', поскольку только конкретные типы могут соответствовать протоколам
Бонус Бонус был бы, если бы я мог сделать это без импорта какой-либо библиотеки и простого написания с использованием swift.