gpt4 book ai didi

objective-c - 在抽象 Objective-C 类中使用常量?

转载 作者:行者123 更新时间:2023-12-03 16:24:21 24 4
gpt4 key购买 nike

首先,让我澄清一下,我知道 Objective-C 中不能有实际的抽象类。当我说抽象时,我的意思是我没有创建该类的任何实例,而只是将其用作继承的基类。

我的抽象类包含一个 NSInteger。从这个抽象类继承的所有类都需要使用这个整数。一旦设置,NSInteger 将永远不会改变。 NSInteger 的值会根据派生类的不同而有所不同。由于它永远不会改变,所以我想将变量设置为 const。但问题是,如果我将其设置为常量,则必须在实例化时设置该值。因此,我必须在基本抽象类中设置该值,但是我无法根据它存在的派生类来调整该值。

我意识到这很难理解,所以我创建了一些基本的伪代码。我使用 NSString 作为示例,但在我的程序中它是 NSInteger:

Class animal: const NSString soundItMakes = "Sound" //the constant integer
//since soundItMakes is const I have to set it upon instantiation even though it doesn't make sense in the base class

Class dog: animal //derives from animal. Needs to change the const soundItMakes to fit a dog however since it was already set in animal, the base class, I can't really change it

Class cat: animal //derives from animal. Needs to change the const soundItMakes to fit cat however since it was already set in animal, the base class, I can't really change it.

我不想从基类中删除变量,而是将其放入每个派生类中,也不想使其成为非常量。有人看到这个问题的解决方案吗?我意识到这很令人困惑,因此如果需要更多信息,请随时询问。

我在 Mac OS X Snowleopard 的 Xcode 3.2.6 中使用 Cocoa。

最佳答案

通常我会使用方法而不是 ivar 来解决这个问题。

@interface Animal : NSObject
+ (NSString *)soundItMakes;
@end

@implementation Animal
+ (NSString *)soundItMakes {
NSAssert(NO, @"Abstract");
}
@end

@implementation Dog
+ (NSString *)soundItMakes {
return @"bark";
}

关于objective-c - 在抽象 Objective-C 类中使用常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137553/

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