2010-12-22 83 views
1

在使用带有Excel的Scripting Bridge时,当我得到单个单元格的值时,我不知道我将从单元格获得什么类。到目前为止,单个单元格的范围返回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

似乎不直观,但与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]]; 
+0

我想我尝试过`id`,但是没有长时间包裹我的大脑以充分理解我在做什么。谢谢 – 2010-12-22 21:01:04

1

您是否问在运行时检查对象的类是否“正常”或“正常”,并根据类而采取不同的行为?如果是这样,这是一个强调 - 这是使Objective-C如此强大的一部分。

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

+0

所以你问以上皆非。 :-D – 2010-12-22 21:52:32

相关问题