gpt4 book ai didi

ios - 如何调用具有在类级别分配的功能的字段

转载 作者:行者123 更新时间:2023-11-29 01:31:36 25 4
gpt4 key购买 nike

如何调用在类级别分配了功能的字段?这是我正在使用的代码片段:

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()。

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

所以通常情况下,如果我使用 playground,如果我有一个函数,它会按我预期的方式工作,然后我将它分配给一个变量。它具有完全相同的代码,但只是超出了类范围。

  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 的编译错误

最佳答案

不能在类级别调用它,因为alias 不是实例方法,而是返回另一个函数的函数(whatever 在这种情况下)。正如您在第一个代码块中提到的,Swift 编译器确实提供了 Missing argument for parameter #1 in call 编译错误:

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

你可以像这样通过别名调用任何函数:

let instance = Foo()
instance.alias(instance)()

这意味着 alias 函数有一个参数,一个 Foo 实例,并返回另一个函数。后一个函数不带任何参数并返回 Int,即 alias 的类型是:

(Foo) -> () -> Int

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

Foo.whatever(instance)()

使用以下代码检查实际的 alias 类型:

println(Foo().alias.dynamicType)

关于ios - 如何调用具有在类级别分配的功能的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com