如何调用具有在类级别中指定的功能的字段

时间:2015-10-28 23:23:59

标签: ios swift

如何调用具有类级别指定功能的字段? 这是我正在使用的代码片段:

class Foo {

  let alias = whatever

  func whatever() -> Int {
    return 3
  }
}
print(Foo().alias) // print out this is a function

print(Foo().alias()) // compilation error about missing argument

首先,我知道我可以使用Foo.whatever()代替。

但让我解释一下为什么我会问这个问题。

通常情况下,如果我正在使用游乐场,它正如我所期望的那样,如果我有一个函数,然后我将它分配给一个变量。它具有完全相同的代码,但它只是在课堂范围之外。

  let alias = whatever

  func whatever() -> Int {
    return 3
  }

  print(alias)  // print out function

  print(alias()) // print 3 so it is working as expected

不知道为什么我无法在类级别调用它,如果无法调用它,为什么swift没有关于类级let alias = whatever的编译错误

2 个答案:

答案 0 :(得分:1)

无法在类级别调用它,因为 alias不是实例方法,而是返回另一个函数的函数({{1} } 在这种情况下)。并且Swift编译器确实提供了whatever编译错误,正如您在第一个代码块中提到的那样:

  

Missing argument for parameter #1 in call

您可以通过以下别名调用print(Foo().alias()) // compilation error about missing argument函数:

whatever

这意味着let instance = Foo() instance.alias(instance)() 函数只有一个参数,一个alias实例,并返回另一个函数。后一个函数什么都不带,返回FooInt的类型是:

alias

基本上,Swift中的实例方法只是一个类型方法,它将实例作为参数并返回一个函数,然后将该函数应用于实例:

(Foo) -> () -> Int

使用以下代码检查实际的Foo.whatever(instance)() 类型:

alias

答案 1 :(得分:0)

要做到这一点,你需要一个计算属性,这将起作用:

\b