我在Swift中有一个简单的Person类,看起来像这样:
class Person { var name = "John Doe" var age = 18 var children = [Person]? \\ init function goes here,but does not initialize children array }
而不是声明孩子是一个可选数组,我可以简单地声明它,并将其初始化为一个空数组,如下所示:
var children = [Person]()
我试图决定哪种方法更好。将数组声明为可选数组意味着它不会占用任何内存,而一个空数组至少有一些分配给它的内存是正确的?所以使用可选数组意味着至少会有一些内存保存。我想我的第一个问题是:这里真的有任何实际的记忆保存,还是我对这个错误的假设?
另一方面,如果它是可选的,那么每次尝试使用它时,我将不得不检查它是否在添加或删除对象之前是否为零。所以在那里会有一些效率的损失(但是我没想到)。
我喜欢可选的方法。不是每个人都会有孩子,所以为什么不让孩子一直没有,直到人决定安抚和抚养家庭?
无论如何,我想知道一种方法还有其他具体的优点或缺点。这是一个一个又一个的设计问题。
在空阵列或可选选项之间进行选择的能力使我们能够从语义角度应用更好地描述数据的能力。
我会选:
>一个空数组,如果列表可以是空的,但它是一个暂时的状态,最终它应该至少有一个元素。非可选使清楚数组不应为空
>如果可以在容器实体的整个生命周期中列表为空,则为可选项。作为一个可选的,可以清楚地表明数组可以是空的
让我举一些例子:
>采购订单与主要和细节(每个产品一个细节):采购订单可以有0个细节,但这是一个暂时的状态,因为没有意义的采购订单与0产品
>有孩子的人:一个人一生中就没有孩子。这不是一个暂时的状态(虽然不是永久的),但是使用可选的,很明显,一个人没有孩子是合法的。
请注意,我的意见只是使代码更清楚和自我解释 – 我认为在选择一个选项或其他选项方面的性能,内存使用等方面没有任何显着的差异。