2014-09-29 3 views
0

Итак, я в Xcode и программирую небольшую программу от друга.Различные типы одного и того же объекта

Я хочу инициализировать несколько экземпляров объекта, поместить их в массив и затем перебрать через него (через функцию, которая возвращает строку). Каждый объект добавляет некоторый текст к этой строке, когда он повторяется, в зависимости от переменных объекта.

Скажем, класс - это дерево. Переменные в классе - это имя (строка), height (int) и hasLeaves (bool) (на данный момент у него на нем есть листья или нет). Я мог бы легко печатать:

«Это имя что высота метров в высоту и имеет листья

Проблема в том, что я хочу, чтобы строка будет немного отличаться в зависимости. на какой тип дерева это, как это:.

дуб (название) большой и lifeful, это высота метров в высоту и имеет листья.

Яблони (имя) несет яблоки, это высота метров в высоту и имеет листья .

Если вы когда-нибудь посетить Швецию вы должны проверить пихты (имени), они высоту высокие и нет листьев.

Я не хочу, чтобы вы написали мне код, но дайте мне ключ. Я не знаю, что искать. Я думал о создании подкласса для каждого дерева, но каждый подкласс появлялся только один раз в программе, и я не знаю, нужно это или нет.

Как вы признаете, мне трудно даже сформулировать этот вопрос, но если вы понимаете мои намерения, я рад любой подсказке, которую я могу получить.

Edit: Так что это моя попытка показать это в коде:

Класс:

class tree { 

var treeHeight: Int? 
var treeWidth: Int? 
var hasLeaves: Bool 
var treeString: String 


init (height: Int?, width: Int?, leaves: Bool, theString: String) { 

    self.treeHeight = height 
    self.treeWidth = width 
    self.hasLeaves = leaves 
    self.treeString = theString 

    } 

}

Основная функция:

var oak: tree = tree(height: 1, width: 2, leaves: true, theString:"Oh, the mighty oak") 
var appleTree: tree = tree(height: 1, width: 2, leaves: false, theString: "Yummy Apples") 

var treeArray: Array = [oak, appleTree] 
var resultString = "This is the stories of the trees: " 


for tree in treeArray { 

     if tree.hasLeaves == true { 

      resultString = resultString + tree.theString 
      } 

     } 

Итак, я хотите, чтобы строка, добавленная в «resultString», была другой, dependi ng на каком дереве оно есть, но я не хочу устанавливать эту строку в инициализации объекта, а скорее из того, что это «вид» дерева. Это облегчает понимание?

Я хочу, чтобы строка (treeString) была статичной в зависимости от того, какой «вид» дерева это. Так что, если это дуб, строка всегда «О, дуб могучий».

+0

Как вы собираетесь «инициализировать несколько экземпляров объекта»? Собираетесь ли вы скорректировать значения? Прочитать их из файла? Покажите нам код, который вы написали. –

+0

Вам лучше разобраться в том, как это решить, написать код и разместить его здесь, подчеркнув, что вы думаете, что не работает должным образом - ваш вопрос, как и сейчас, слишком обобщен, и вскоре он может быть закрыт для не в тему – Antonio

+0

Привет, спасибо за ваши ответы. Скоро я отправлю код. Для вас, Роб, я мог бы неправильно использовать слова, я только начал программировать несколько месяцев назад. – Mattias

ответ

0

Похоже, вы хотите, чтобы класс дерева имел некоторые свойства, такие как листья и т. Д.Может быть, вы также хотите, чтобы подклассы листов с дополнительными свойствами, как цвет и т.д. Я рекомендую WWDC 2014 видео:

http://youtu.be/W1s9ZjDkSN0

Где-то около 30 минут у них есть демо-класс автомобиля с Racecar в подклассе.

Что касается создания объектов, вы можете построить каждый объект индивидуально, а затем собрать их в массиве как один из параметров. Например, возможно, в форме вашего приложения пользователь вводит данные для класса или подкласса, а затем вы создаете объект, храните его в главный массив, который затем архивируете в файл.

+0

Большое спасибо Стив, я ценю ссылку и совет :) – Mattias

0

Так что, если кто-то спотыкается на этот вопрос, это то, что я узнал:

Я искал подклассов и протоколов. Существуют методы определения того, является ли объект определенным подклассом, и в моем случае я мог бы иметь протокол с именем «Tree» с определенными методами и/или методами, а затем создавать подклассы для этого протокола, называемые «дуб» и « ель».

Смежные вопросы