我是Swift的新手并且正在玩子类化。我想要实现的是简单地通过子类化将存储的属性添加到现有类,然后将现有实例的副本从类中复制到子类中。 我正在尝试使用MPMediaEntity并以这种方式对其进行子类化:
class MPMediaEntityWithMyString: MPMediaEntity{
var myString:String = ""
}
然后,我只需要获取MPMediaEntities列表:
// Get all the songs in an array
let mediaItems = MPMediaQuery.songsQuery().items
// Go through each song, make a copy of it as MPMediaEntityWithMyString
// and modify the myString property
for song in mediaItems{
// This is where I stall. How do I copy the MPMediaEntity into the MPMediaEntityWithMyString? It moans about it not being convertible
var songCopy:MPMediaEntityWithMyString = song
songCopy.myString = "testing!"
println(songCopy.myString)
}
我在做什么显然是错的?
答案 0 :(得分:0)
你做不到。 BaseClass引用可以有Subclass引用,但你不能在SubClass中赋予BaseClass的引用.Subclass有一些额外的属性和行为,所以你不能将BaseClass引用分配给SubClass。你必须这样做
let mediaItems = MPMediaEntityWithMyString.songsQuery().items
但这些项目的类型应为MPMediaEntityWithMyString
而不是MPMediaQuery
。
另一个选择是,您可以使用composition
代替inheritance
class MPMediaEntityWithMyString {
var mediaItem:String?
var myString:String = ""
}
答案 1 :(得分:0)
在不了解整个项目的情况下,我建议使用合成而不是继承。这意味着你创建了一个类(或者更合适的结构),它具有MPMediaEntity
的属性和String
类型的另一个属性。
这有效地将您的自定义数据对象与任何其他类的混乱继承树分离。