2014-12-27 5 views
0

Я новичок в Swift и играю с подклассификацией на данный момент. То, что я пытаюсь достичь, - это просто добавить сохраненное свойство к существующему классу путем его подклассификации, а затем сделать копию существующего экземпляра из класса в подкласс. Я пытаюсь это с MPMediaEntity и подклассы это так: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

Не зная весь проект, я бы предложил использовать композицию вместо наследования. Это означало бы, что вы создадите класс (или, может быть, структуру более уместным), который имеет свойство MPMediaEntity и другое свойство типа String.

Это эффективно отделяет ваш пользовательский объект данных от беспорядочного дерева наследования любого другого класса.

0

Вы не можете. Ссылка BaseClass может иметь Подкласс refrence, но вы не можете назначить refrence из BaseClass в SubClass.Subclass имеет некоторые дополнительные свойства и поведение, так что вы не можете назначить BaseClass refrence для SubClass.You должны сделать

let mediaItems = MPMediaEntityWithMyString.songsQuery().items 

, но эти элементы должны быть тип MPMediaEntityWithMyString нет MPMediaQuery.

Еще один вариант вы можете использовать composition вместо inheritance

class MPMediaEntityWithMyString { 
    var mediaItem:String? 
    var myString:String = "" 
}