Использование:
Random r = new Random();
int x= r.Next(10);//Max range
Вы не можете этого сделать. 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))