以下にいくつかのコードがあり、コンパイル時にエラーが発生するものとそうでないものがあります。バグはありますか、それともここでジェネリックについて何か見逃していますか?
1)動作しません:
class DataSource: NSObject {
var dataObjects: [DataType]
init<T where T: DataType>(dataObjects: [T]) {
self.dataObjects = dataObjects //Cannot assign value of type [T] to type [DataType]
}
}
しかし、これは機能します:
class DataSource: NSObject {
var dataObjects: [DataType]
init<T where T: DataType>(dataObjects: [T]) {
self.dataObjects = []
for dataObject in dataObjects {
self.dataObjects.append(dataObject)
}
}
}
2)動作しません:
class DataSource: NSObject {
var dataObjects: [DataType]
init<T:DataType>(dataObjects: [T]) {
self.dataObjects = dataObjects //Cannot assign value of type [T] to type [DataType]
}
}
しかし、これは機能します:
class DataSource: NSObject {
var dataObjects: [DataType]
init<T:DataType>(dataObjects: [T]) {
self.dataObjects = []
for dataObject in dataObjects {
self.dataObjects.append(dataObject)
}
}
}
3) これも機能します:
class DataSource<T: DataType>: NSObject {
var dataObjects: [T]
init(dataObjects: [T]) {
self.dataObjects = dataObjects
}
}
T where T: DataType
また、との違いは何ですかT:DataType
PS:DataType は空のプロトコルです