Swift 为什么可以’;t斯威夫特&x2019;s字符串构造函数是否用于将泛型转换为字符串?
考虑下面的例子Swift 为什么可以’;t斯威夫特&x2019;s字符串构造函数是否用于将泛型转换为字符串?,swift,generics,Swift,Generics,考虑下面的例子 func printGeneric<T>(_ input: T) { let output = String(input) print(output) } 为什么第一种方法不起作用,而第二种方法起作用?获取泛型的字符串表示的“正确”方法是什么?如何 func printGeneric<T>(_ input: T) { let output = String(describing:input) print(output) }
func printGeneric<T>(_ input: T) {
let output = String(input)
print(output)
}
为什么第一种方法不起作用,而第二种方法起作用?获取泛型的字符串表示的“正确”方法是什么?如何
func printGeneric<T>(_ input: T) {
let output = String(describing:input)
print(output)
}
func printGeneric(uu输入:T){
让输出=字符串(描述:输入)
打印(输出)
}
至于原因:
- 第一种方法,
,用于特定情况,String(x)
属于可以强制为String的类型,以便在程序中使用。换句话说,它是一种类型,其中每个值都有一个等价的字符串,如x
和1
。我们不知道t是否是那种类型,因此编译失败“1”
- 但是
与String(description:x)
完全相同-用于将任何内容打印到控制台。它不是强制,而是字符串表示“\(x)”
您还可以选择使用
字符串(反射:)
;它与String(description:)
有着微妙的不同。如果能够对正在定义的一组类型说String(T)
对您来说很重要,那么您可以声明一个协议,为该协议类型定义一个字符串初始值设定项,并用该协议类型约束T。
func printGeneric<T>(_ input: T) {
let output = String(describing:input)
print(output)
}