Generics Apple Swift:仅字符串类型的泛型类型约束无效

Generics Apple Swift:仅字符串类型的泛型类型约束无效,generics,swift,Generics,Swift,非常奇怪,但下面的代码不起作用,我收到一条消息“继承自非协议、非类类型‘String’”。也不适用于所有其他基本类型,如Int、Bool等,但它适用于equalable类型。有什么问题我不明白 import Cocoa import Foundation class Foo<T: String> {} 导入可可粉 进口基金会 类Foo{} 您遇到的错误是因为您无法从结构继承,而字符串是一个结构。泛型的要点是允许我们的类具有多种不同的类型。我们可以指定我们的泛型具有某些特定方面 例

非常奇怪,但下面的代码不起作用,我收到一条消息“继承自非协议、非类类型‘String’”。也不适用于所有其他基本类型,如Int、Bool等,但它适用于equalable类型。有什么问题我不明白

import Cocoa
import Foundation

class Foo<T: String> {}
导入可可粉
进口基金会
类Foo{}

您遇到的错误是因为您无法从结构继承,而字符串是一个结构。

泛型的要点是允许我们的类具有多种不同的类型。我们可以指定我们的泛型具有某些特定方面

例如,如果我们想要Equalable对象,我们将在声明泛型时指定:

class Foo<T: Equatable> {

}
使用类执行此操作的优点是,我们仍然可以区分
Foo
Foo
的实例。如果我们不使用泛型,并指定类型为
ParentClass
的实例变量,继承将允许我们仍然将
ChildClass
的对象分配给它,但我们将无法比较
Foo
的对象来确定它是什么类型的
Foo
,除非我们使用泛型。考虑一个类型<代码> > [PARTROCKEY] ,它可以保存<代码> ParentClass <代码>或它的子类,而不是类型<代码> >子类> /代码>,它不能保存类型<代码> ParentClass < /代码> .< /P>
现在,回到您关于
Foo
的问题,这里的问题是
String
是一个结构。它不是一个可以继承的类,也不是一个其他东西可以遵循的协议。这是一个结构。
Foo
可以是的唯一类型是
Foo
,因为没有其他类型是
字符串。因此,
Foo
是不允许的,因为这只会让人困惑

将此与第一个示例相比较,即
Foo
,因为事物可以符合
equalable
,所以我可以实例化许多类型的
Foo

let i = Foo<Int>()
let d = Foo<Double>()
let s = Foo<String>()
let c = Foo<Character>()
let i=Foo()
设d=Foo()
设s=Foo()
设c=Foo()
但是如果允许
Foo
,我唯一能够实例化的是:

let s = Foo<String>()
让s=Foo()

而且我永远无法实例化任何其他类型的
Foo
,那有什么意义呢?

你可以得到任何颜色的Model-T,只要它是黑色的。
let s = Foo<String>()