Iphone swift中的类型有问题吗?

Iphone swift中的类型有问题吗?,iphone,swift,Iphone,Swift,我做了一个团队树屋代码挑战,我有一个问题想问。基本上,我在一个枚举中创建了一个func,它采用枚举的特定大小写并初始化给定的对象。它告诉我在枚举中创建它,但不幸的是,当我这样做时,我遇到了一些错误。我能够在枚举之外完成挑战,但我不认为这正是我应该做的 无论如何,我的问题是,当它返回对象UIBarButtonItem时,如果它被分配给一个常量,那么常量的类型是“()->UIBarButtonItem”,或者根据开关的设置,它也可能像“(Button)->UIBarButtonItem”一样出现。我

我做了一个团队树屋代码挑战,我有一个问题想问。基本上,我在一个枚举中创建了一个func,它采用枚举的特定大小写并初始化给定的对象。它告诉我在枚举中创建它,但不幸的是,当我这样做时,我遇到了一些错误。我能够在枚举之外完成挑战,但我不认为这正是我应该做的

无论如何,我的问题是,当它返回对象UIBarButtonItem时,如果它被分配给一个常量,那么常量的类型是“()->UIBarButtonItem”,或者根据开关的设置,它也可能像“(Button)->UIBarButtonItem”一样出现。我真的不确定'->'符号在这种情况下是什么意思。为什么它不完全变成课堂?这是怎么回事?在这之前的教程中,我们似乎做了同样的事情,所以我不知道为什么它不起作用

enum Button {
    case Done(String)
    case Edit(String)

func toUIBarButtonItem () -> UIBarButtonItem {
    switch self {
    case .Done: return UIBarButtonItem(title: "Done", style: .Done, target: nil, action: nil)
    case .Edit: return UIBarButtonItem(title: "Plain", style: .Plain, target: nil, action: nil)
        }
    }
}

let done = Button.Done("Done")
let doneButton = Button.toUIBarButtonItem(done)

这是我正在运行的代码,不包括UIBarButtonItem类。我希望这些信息足以理解我的问题。

您正在调用
按钮
类型上的
touibarbuttonim()
方法,而不是
按钮
实例;这就是为什么它会做一些特殊的事情:它返回一个curried函数,然后将其绑定到
done
。然而,结果仍然是一个函数

您可能的意思是调用
done
对象上的方法:

let done = Button.Done("Done")
let doneButton = done.toUIBarButtonItem()

可以在

下找到更深入的解释,好吧,那么如果函数返回一个对象,为什么变量会保存一个函数而不是预期的对象呢?编辑帖子以显示代码,如果这样有帮助的话。是的,谢谢,我意识到我没有在实例上调用它,但那是因为在我需要传递它之前,我认为调用它本身并传递它是没有意义的。但一旦我把开关改为self,它就更有意义了,我只是从来没有改变我实际调用它的部分。它仍然允许我传入done,即使不再指定存在争论。很惊讶它没有抛出任何错误,但至少我现在明白了,谢谢你的帮助!好了,现在我明白了。最初我让toUIBarButtonItem函数接受一个按钮类型,这意味着我必须将done对象作为参数传入,所以我不知道如何对其调用此方法,所以我只是将其传入函数中。我需要开关的按钮对象,但后来我意识到我可以移除它,然后打开self。因此,我的其余代码保持不变,但我想我忘记了我不再需要传递任何东西了。我很惊讶xcode甚至允许我在没有指定参数的情况下传入它。谢谢