1

ExcelでScriptingBridgeを使用する場合、単一のセルの値を取得すると、そのセルからどのクラスを取得するのかわかりません。これまでのところ、単一のセルの範囲はNSStringorを返しますNSNumber(複数のセルの範囲は常にanNSArrayを返し、そこから値を強制する必要があります)。私の仕事では、通常、セルの文字列値のみが必要なので、単一セル範囲の値を必要なものに強制変換するために、これを行います...

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];
}

私の問題は最初の行にあります(私はまだ少しリファクタリングを行っているので、当面は3番目の行を無視します)。クラスをテストするためにセルの値をキャプチャするためのより良いクラスはありますか?これらの最後の3行は問題なく機能しますが、それを行うのは完全に快適ではありません。直感的ではないように見えますが、一緒に行くの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 に答える