Проблема при написании универсальной функции, которая принимает любое значение, являющееся RawRepresentable пользователем CustomStringConvertible - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь написать функцию, которая принимает любое значение RawRepresentable с помощью CustomStringConvertible. Я попытался написать это:

enum MyEnum: String {
    case a = "someString"
}

func myFunction<R: RawRepresentable>(val: R) where R.RawValue == CustomStringConvertible {
    print(val.rawValue.description)
}

myFunction(val: MyEnum.a)

Однако я получаю следующую ошибку:

Global function 'myFunction(val:)' requires the types 'String' and 'CustomStringConvertible' be equivalent

Что странно, поскольку String соответствует CustomStringConvertible.

Соответствие RawValue просто String работает, однако, я хотел бы сделать эту работу с другими CustomStringConvertible.

Почему это не компилируется, и есть ли способ, которым я могу этого добиться

1 Ответ

1 голос
/ 04 октября 2019

Вы должны сказать, что он соответствует протоколу

where R.RawValue: CustomStringConvertible 

Теперь он работает и для других типов

enum MyEnum2: Int {
    case one = 1
}

myFunction(val: MyEnum2.one)
...