3

NSRange要素を含む配列があります。

これで、を使用して配列の最後の範囲要素を取得できます[resultArray lastObject]

最後の要素にアクセスすると、不明なオブジェクトが返されます。(未知のクラスを意味します)

今、オブジェクトを にキャストしたいと思いますNSRange。どうやってするの?

私のコードは次のとおりです。

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:paraStartRegEx options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:content options:0 range:NSMakeRange(0, [content length])];
NSObject *obj =  [matches lastObject];

このオブジェクトを に変換するにはどうすればよいNSRangeですか?

4

2 に答える 2

5

ドキュメントを読んだことがあれば、 のmatchesInString:options:range:メソッドがs ではなくofオブジェクトをNSRegularExpression返すことに気付いたはずなので、それらを直接取得できなくても不思議ではありません。NSArrayNSTextCheckingResult NSRange

さらに (重要な違いであるため、将来のためにこれを覚えておく必要があります)、NSRangeCstructであり、Objective-C オブジェクトではありません。これは、 s または他の Objective-C オブジェクト コンテナーに直接格納できないことを意味します。NSArray NSArrayNSDictionary、およびオブジェクトの格納に使用されるその他の Objective-C クラスは、Objective-C タイプ のオブジェクト、つまり のインスタンスであり、Classでメッセージを送信できるオブジェクトのみを格納できます[object method]

質問に戻ると、取得元の配列には、一致の範囲だけでなく、より多くの情報をmatchesInString:options:range:含むオブジェクトが含まれているため、それらを;にキャストすることはできません。必要なものを取得するには、オブジェクトのプロパティにアクセスする必要があります。NSTextCheckingResultNSRangerange

NSTextCheckingResult *result = [matches lastObject];
NSRange range = [result range];
于 2013-07-15T10:46:17.987 に答える