Swift 函数的枚举参数

Swift 函数的枚举参数,swift,Swift,我得到一个错误: FooEnum不能转换为FooClass 这个代码有什么不对? 解释错误消息,让我们考虑 FooCy.MyStult< /C> >: enum FooEnum: Int { case fooEnumCase = 13512 case fooEnumCase2 = 425156 } class FooClass { public func myFunction(chosenEnumCase: fooEnum) -> String {

我得到一个错误:

FooEnum
不能转换为
FooClass


这个代码有什么不对?

解释错误消息,让我们考虑<代码> FooCy.MyStult< /C> >:

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

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

fooClass.myFunction(fooEnum.fooEnumCase)
该函数需要一个
fooClass
实例,并返回另一个
((fooEnum)->字符串)
。而在您的代码中,它是一个类型为
fooEnum
的实例


在实例上调用该函数:

let f: (fooClass) -> ((fooEnum) -> String) = fooClass.myFunction
或使
myFunction
成为类函数:

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


PS:为了符合快速命名约定,使用<代码> PoeNum < /C> >代码> FooClass < /代码> ./P> < P>解释错误消息,让我们考虑<代码> FooCy.MyType < /C> >:

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

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

fooClass.myFunction(fooEnum.fooEnumCase)
该函数需要一个
fooClass
实例,并返回另一个
((fooEnum)->字符串)
。而在您的代码中,它是一个类型为
fooEnum
的实例


在实例上调用该函数:

let f: (fooClass) -> ((fooEnum) -> String) = fooClass.myFunction
或使
myFunction
成为类函数:

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


注:为了遵守Swift命名约定,请使用
FooEnum
FooClass

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

两个问题:

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

public class func myFunction(chosenEnumCase: fooEnum) -> String
这会引发一个新的错误

调用中缺少参数标签“chosenEnumCase:”

您必须添加参数标签:



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

两个问题:

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

public class func myFunction(chosenEnumCase: fooEnum) -> String
这会引发一个新的错误

调用中缺少参数标签“chosenEnumCase:”

您必须添加参数标签:



提示:
myFunction
是一个实例方法,它是在
fooClass
的实例上调用的,而不是在类本身上调用的。这不一定是问题的原因,但swift中的类型名称应该以大写字母开头。@MartinR yea直到一分钟前才真正意识到这一点
fooClass().myFunction(fooEnum.fooEnumCase)
提示:
myFunction
是一个实例方法,它是在
fooClass
的实例上调用的,而不是在类本身上调用的。这不一定是问题的原因,但在swift中键入的名称应该以大写字母开头。@MartinR yea直到一分钟前才真正意识到这一点
fooClass().myFunction(fooEnum.fooEnumCase)
Challenge:Explain编译器错误“'fooEnum'不能转换为'fooClass'”)@MartinR如果满足挑战,我能获得奖品吗@我不明白<代码>让f:(fooClass)->((fooEnum)->字符串)=fooClass.myFunction与my不同code@john在您的代码中,您正在将
fooEnum.fooEnumCase
传递给函数
fooClass.myFunction
@Carpsen90:you get my+1:)–顺便说一句,根本原因是:解释编译器错误“'fooEnum'不能转换为'fooClass'”:)@MartinR如果挑战成功,我会得到奖品吗?@Carpsen90我没有得到它…
let f:(fooClass)->((fooEnum)->String)=fooClass.myFunction
与我的code@john在您的代码中,您将
fooEnum.fooEnumCase
传递给函数
fooClass.myFunction
@Carpsen90:您将获得my+1:)–顺便说一句,根本原因是