gpt4 book ai didi

Swift 类型(:) function signature

转载 作者:可可西里 更新时间:2023-11-01 00:47:50 26 4
gpt4 key购买 nike

我正在尝试实现返回值类型的简单名称的函数:

func typeName(of value: Any) -> String {
return String(describing: type(of:value))
}

但是当我尝试在 super.init 调用之前调用它时:

class SuperTest {
init(name: String) {
print(name)
}
}

class Test: SuperTest {
init() {
// super.init(name: String(describing: type(of: self)))
super.init(name: typeName(of: self))
}
}


Test()

它失败了:

'self' used before super.init call

这对我来说是完全清楚的。

但是当我内联 typeName(of:) 主体代码(注释行)时,它会编译并打印预期的“测试”结果。

为什么会发生这种魔法,我如何在 super.init() 之前使用 typeName(of:) 就像 type(of:)?

此外,我在 Swift 中找不到有关 type(of:) 的任何信息(函数签名)docssource code .

最佳答案

尽管它看起来像type(of:) 不是一个函数,但它被编译器静态处理为一个Dynamic Type Expression。 .因此,您可以在调用 super.init 之前使用它。

对于您的自定义函数,编译器不知道您实际上没有使用该值,因此它不允许调用。

关于Swift 类型(:) function signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41643649/

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