Swift - 将MPMediaEntity实例复制到子类中

时间:2014-12-27 16:25:26

标签: ios swift mpmediaitem

我是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)
}

我在做什么显然是错的?

2 个答案:

答案 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类型的另一个属性。

这有效地将您的自定义数据对象与任何其他类的混乱继承树分离。