Есть ли в Swift эквивалент для передачи в качестве аргумента пустого интерфейса {}, как в Go?
Я не очень знаком с Go, но я думаю, что эквивалент Swift будет аргументом типа Any или AnyObject. С таким аргументом вы ничего не сможете сделать, кроме как попытаться привести его к более конкретному типу c.
Any
AnyObject
Go интерфейсы и протоколы Swift совершенно разные:
Golang интерфейсы "структурные" (сродни "Concepts" * 1006 в C ++) *), что означает, что их идентичность определяется их структурой. Если структура go имеет структуру, требуемую интерфейсом, она неявно реализует этот интерфейс. То есть структура нигде не говорит: «Я уверен, S, и я реализую интерфейс I».
S
I
Протоколы Swift являются «номинальными», что означает, что их идентичность определяется их именем. Если структура Swift удовлетворяет всем требованиям протокола, она не соответствует этому протоколу, если не сделано явное объявление struct S: P { ... } (тело этого объявления может даже быть пустым, но оно все равно необходимо для соответствия существовать).
struct S: P { ... }
Ближайший аналог interface{} в Swift - Any. Это встроенный протокол, которому соответствуют все типы. Он получает специальную обработку, определяется компилятором и имеет жестко запрограммированный лог c, чтобы все остальные типы соответствовали ему. Вы не увидите явно объявленных protocol Any {} или struct S: Any {}. AnyObject похоже, а также получает специальное лечение. Но никакие другие протоколы Swift не делают. Их соответствие должно быть явным.
interface{}
protocol Any {}
struct S: Any {}
Если я не ошибаюсь, эквивалент Swift будет:
protocol EmptyProtocol { }
В быстрых интерфейсах называются протоколы, не спрашивайте меня: D
Вы пытаетесь удалить тип или что-то в этом роде? ? Просто любопытно ...