gpt4 book ai didi

objective-c - 制作 Objective-C 类的不可变和可变版本的最有效方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 03:29:36 26 4
gpt4 key购买 nike

假设我正在创建一个表示分数的 Objective-C 类,并且想要创建不可变和可变版本。

遵循 Foundation 框架中的模式,您可能希望在不可变版本中看到方法 fractionByAddingFraction:,在可变版本中看到方法 addFraction:

我遇到的悖论是如何在两个类之间只包含一次分数相加逻辑。似乎不可变的 fractionByAddingFraction: 方法需要了解(并利用)可变的 addFraction: 方法以避免代码重复,但还包括可变方法在不可变类的实现中意味着它们可以在不可变对象(immutable对象)上被调用,这违背了这一点。

非常感谢一个简短的解释(或者更好的是,这个简化示例的延续)!

最佳答案

你的方法是正确的(如果你真的需要一个可变的子类,你应该避免,除非你真的需要它)。我不太清楚哪里会出现混淆。您最容易使用 fractionByAddingFraction: 实现 addFraction:。这会有点低效,但这是最有意义的方向。像这样的东西:

- (void)addFraction:(Fraction *)anotherFraction {
Fraction *newFraction = [self fractionByAddingFraction:anotherFraction];
self.internalStuff = newFraction.internalStuff;
}

但通常情况下,您可能会使用两个类都会使用的一些私有(private) _GetInternalStuffByAddingInternalStuffs() 函数更有效地处理此问题。

关于objective-c - 制作 Objective-C 类的不可变和可变版本的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com