Enum параметр для функции - PullRequest
       7

Enum параметр для функции

0 голосов
/ 29 октября 2018
enum FooEnum: Int {
    case fooEnumCase = 13512
    case fooEnumCase2 = 425156
}

class FooClass {
    public func myFunction(chosenEnumCase: fooEnum) -> String {
        /* Logic */
    }
}

fooClass.myFunction(fooEnum.fooEnumCase)

Я получаю ошибку:

FooEnum не конвертируется в FooClass

Что не так с этим кодом?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Прежде всего, код очень трудно читать с именами классов в нижнем регистре.

Два выпуска:

С этим синтаксисом метод должен быть функцией class .

public static func myFunction(chosenEnumCase: FooEnum) -> String

Что вызывает новую ошибку

Отсутствует метка аргумента selectedEnumCase: в вызове

и вы должны добавить метку параметра:


enum FooEnum: Int {
    case fooEnumCase = 13512
    case fooEnumCase2 = 425156
}

class FooClass {
    public static func myFunction(chosenEnumCase: FooEnum) -> String {
        //logic
    }
}

FooClass.myFunction(chosenEnumCase: FooEnum.fooEnumCase)
0 голосов
/ 29 октября 2018

Чтобы объяснить сообщение об ошибке, давайте рассмотрим fooClass.myFunction:

let f: (fooClass) -> ((fooEnum) -> String) = fooClass.myFunction

Это функция, которая ожидает экземпляр fooClass и возвращает другую функцию ((fooEnum) -> String). В то время как в вашем коде он получает экземпляр типа fooEnum.


Вызовите эту функцию в экземпляре:

let myInstance = fooClass()
myInstance.myFunction(chosenEnumCase: fooEnum.fooEnumCase)

Или сделать myFunction функцией класса:

public class func myFunction(chosenEnumCase: fooEnum) -> String

PS: Чтобы соответствовать соглашениям об именах Swift, используйте FooEnum и FooClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...