Вы не можете этого сделать.Swift - статически типизированный язык, и во время компиляции компилятор должен понимать, какой у вас тип.Если ваш тип может быть одним или другим, компилятор не знает, как его решить.
Представьте себе, например, что у вас есть тип A
с методом foo()
и тип B
с методом bar()
.Если ваш элемент A or B
, как компилятор разрешит вызов foo()
или bar()
во время компиляции?Это просто невозможно, поскольку нет никаких гарантий, что ваш тип будет реализовывать любые из них.Я бы предложил вам создать свою функцию с двумя отдельными необязательными параметрами.Что-то вроде:
func test(item: CVarArg?, other: AnyObject?)->String? {
return nil
}
Затем проверьте, какой из параметров передан.Надеюсь, что это поможет!
РЕДАКТИРОВАТЬ
Другой вариант, который у вас также есть, - заключить ваши типы в перечисляемые случаи.Что-то вроде:
enum Item {
case foo(CVarArg)
case bar(AnyObject)
}
func test(item: Item) {
switch item {
case .foo(let arg):
// arg is CVarArg
print(arg)
case .bar(let obj):
// obj is AnyObject
print(obj)
}
}
var arg: CVarArg!
test(item: .foo(arg))