以下にいくつかのコードがありますが、いくつかはコンパイル時にエラーを出します。バグはありますか、ここでジェネリックについて何か迷っていますか?汎用配列にプロトコル配列を割り当てることができません
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]
}
}
をしかし、これは動作します:
1)は動作しません
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との違いは何ですか:データ型は
'のinit(データオブジェクト:[データ型])と間違っている何'?それでも、データ型の権利に準拠した配列を受け入れますか? –
しかし、なぜこれらの仕事はしないのですか? – osrl
あなたは正しいです、迅速なバグかもしれません –