1

在将 Scripting Bridge 与 Excel 一起使用时,当我获取单个单元格的值时,我不知道要从该单元格中获取什么类。到目前为止,单个单元格的范围返回一个NSStringNSNumber(多个单元格的范围总是返回一个NSArray,我需要从那里强制转换值)。在我的工作中,我通常只想要单元格的字符串值,所以为了将单个单元格范围的值强制为我需要的值,我这样做......

NSString *cellValue = [targetRange.value get];
if ([cellValue isKindOfClass:[NSString class]]) {
    cellValue = [targetRange.value get];
} else if ([cellValue isKindOfClass:[NSNumber class]]) {
    cellValue = [[targetRange.value get] stringValue];
}

我的问题在于第一行(我们暂时忽略第三行,因为我还在做一些重构)。会有更好的类来捕获单元格的值来测试类吗?最后三行工作正常,但我觉得这样做不太舒服;这似乎不直观,但NSObject感觉也很奇怪。

4

2 回答 2

4

这似乎不直观,但NSObject感觉也很奇怪。

在这种情况下,您可以使用id

id 类型完全不受限制。它本身不会产生关于对象的信息,除了它是一个对象。

例如:

id cellValue = [targetRange.value get];
NSString *stringValue = nil;
if ([cellValue isKindOfClass:[NSString class]]) {
    stringValue = cellValue;
} else if ([cellValue isKindOfClass:[NSNumber class]]) {
    stringValue = [cellValue stringValue];
}

请注意,在您的情况下,您可能只使用以下内容:

NSString *stringValue = [NSString stringWithFormat:@"%@", [targetRange.value get]];
于 2010-12-22T15:35:13.573 回答
1

您是在问在运行时检查对象的类并根据类采取不同的行为是“好的”还是“正常的”?如果是这样,那是肯定的——这就是使 Objective-C 如此强大的部分原因。

如果您问是否有更好的方法来确定对象的类别,那么不,不是真的。我的意思是你可以直接比较类( == ),但这并不总是明智的,给定类集群、子类等。

于 2010-12-22T15:33:15.323 回答