函数的枚举参数

时间:2018-10-29 18:27:42

标签: swift

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 :(得分:1)

要解释该错误消息,我们考虑使用@After

fooClass.myFunction

该函数需要一个let f: (fooClass) -> ((fooEnum) -> String) = fooClass.myFunction 实例,并返回另一个函数fooClass。而在您的代码中,该类型为((fooEnum) -> String)类型的实例。


在实例上调用该函数:

fooEnum

或将let myInstance = fooClass() myInstance.myFunction(chosenEnumCase: fooEnum.fooEnumCase) 设为类函数:

myFunction

PS:要遵守Swift的命名约定,请使用public class func myFunction(chosenEnumCase: fooEnum) -> String FooEnum

答案 1 :(得分:1)

首先,使用小写的类名很难阅读代码。

两个问题:

使用这种语法,该方法应该是函数。

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

哪个会引发新的错误

  

呼叫中缺少自变量标签'chosenEnumCase:'

,您必须添加参数标签:


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

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

FooClass.myFunction(chosenEnumCase: FooEnum.fooEnumCase)