Может ли Swift создать & ldquo; ИЛИ & rdquo; тип для параметров?

Использование:

Random r = new Random();
 int x= r.Next(10);//Max range
1
задан hopy 3 March 2019 в 01:05
поделиться

1 ответ

Вы не можете этого сделать. 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))
0
ответ дан paivaalan 3 March 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: