gpt4 book ai didi

swift - 为什么不能使用 Swift 的字符串构造函数将泛型转换为字符串?

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:47 26 4
gpt4 key购买 nike

考虑以下示例。

func printGeneric<T>(_ input: T) {
let output = String(input)
print(output)
}

这将导致错误 cannot invoke initializer for type 'String' with an argument list of type '(T)'(在 Playground 上测试)

但是,出于某种原因,这确实有效。

func printGeneric<T>(_ input: T) {
let output = "\(input)"
print(output)
}

为什么第一种方法不行,而第二种方法可以呢?获取泛型的字符串表示形式的“正确”方法是什么?

最佳答案

怎么样

func printGeneric<T>(_ input: T) {
let output = String(describing:input)
print(output)
}

至于为什么:

  • 第一种方法,String(x),适用于特定情况,其中 x 是可以强制转换为 String 的类型,以便在您的程序。换句话说,它是一种类型,其中每个值都有一个字符串等价物,例如1"1"。 (参见 LosslessStringConvertible。)我们不知道 T 是否是那种类型,因此编译失败。

  • 但是 String(describing:x)"\(x)" 完全相同 — 它用于打印任何内容 到控制台。它不是强制转换,而是字符串表示。

你也可以选择使用String(reflecting:);它与 String(describing:) 略有不同。

关于swift - 为什么不能使用 Swift 的字符串构造函数将泛型转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462156/

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