2014-09-29 109 views
0

所以,我在Xcode中编写了一个朋友的小程序。不同类型的同一个对象

我想初始化一个对象的几个实例,把它们放在一个数组中,然后遍历它(通过返回一个字符串的函数)。每个对象在迭代时都会向该字符串添加一些文本,具体取决于对象的变量。

假设这个班级是树。类中的变量是name(string),height(int)和hasLeaves(bool)(它现在有或没有留下的天气)。我可以轻松地打印:

“这是一个高度米高大有叶

问题是我想要的字符串是有点不同,这取决于。关于哪种树是这样的:

橡木()大和充满活力的,它的个头高度米和已离开

苹果树()进行了一些苹果,这是高度米高大有叶

你要是到瑞典,你应该看看冷杉(),他们是高度高大没有得到叶

我不希望你为我写代码,但给我一个线索。我不知道要寻找什么。我正在考虑为每个树创建一个子类,但每个子类只会在程序中出现一次,我不知道是否有必要。如你所知,即使制定这个问题我也很难,但如果你明白我的意图,我很高兴能得到任何线索。

编辑:所以这是我试图表明它在代码:

类:

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”的字符串不同,取决于不管它是哪种树,但我不想在对象的初始化中设置该字符串,而是从它的“种类”树中设置该字符串。这是否更容易理解?

我希望字符串(treeString)是静态的,具体取决于树的“种类”。所以,如果它是橡树,弦总是“哦,可能橡木”。

+0

你打算如何“初始化一个对象的几个实例”?你打算对这些值进行硬编码吗?从文件中读取它们?向我们展示您迄今为止编写的代码。 – 2014-09-29 19:36:10

+0

你最好详细说明如何解决这个问题,写一些代码并在这里发布,突出你认为不能正常工作 - 你的问题,因为它是现在,它太通用了,它可能很快关闭关闭主题 – Antonio 2014-09-29 19:37:35

+0

嗨,谢谢你的回复。我会很快发布一些代码。对你来说,罗伯,我可能会用错词,几个月前我刚刚开始编程。 – Mattias 2014-09-30 09:12:17

回答

0

这听起来像你想要一个具有树叶等属性的树类。也许你也想继承叶子与喜欢的颜色附加属性,等我推荐的WWDC 2014视频:

http://youtu.be/W1s9ZjDkSN0

某处大约30分钟后,他们有一个汽车类与子类赛车演示。

关于创建对象,可以单独构建每个对象,然后将它们作为一个选项收集到数组中。例如,也许在应用程序中的表单中,用户输入类或子类的数据,然后创建一个对象,将其存储到主数组中,然后将其存档到文件中。

+0

非常感谢史蒂夫,我欣赏链接和建议:) – Mattias 2014-09-30 09:13:18

0

所以,如果有人跌倒在对这个问题,这是我学到了什么:

我一直在寻找的子类和协议。有一些方法可以确定某个对象是否属于某个子类,在我的情况下,我可以使用某些方法和/或方法来创建一个名为“Tree”的协议,然后将该协议的子类称为“oak”和“冷杉”。

相关问题