超堅牢にしたい場合:
__block NSString *lastWord = nil;
[someNSStringHere enumerateSubstringsInRange:NSMakeRange(0, [someNSStringHere length]) options:NSStringEnumerationByWords | NSStringEnumerationReverse usingBlock:^(NSString *substring, NSRange subrange, NSRange enclosingRange, BOOL *stop) {
lastWord = substring;
*stop = YES;
}];
(これはローマ字以外の言語でも動作するはずです; iOS 4+/OS X 10.6+.)
基本的な説明:
-enumerateSubstringsInRage:options:usingBlock:
缶に書かれていることを行います。オプションとして渡すものによって定義される部分文字列を列挙します。NSStringEnumerationByWords
「私に与えられた言葉が欲しい」とNSStringEnumerationReverse
言い、「文字列の先頭ではなく末尾から始めてください」と言います。
最後から始めているので、最初に与えられたsubstring
単語が文字列の最後の単語になるので、その単語を設定lastWord
し、BOOL
指している bystop
を YES に設定して、列挙がすぐに停止するようにします。
lastWord
はもちろん として定義されて__block
いるため、ブロック内に設定して外に表示することがnil
でき、文字列に単語が含まれていない場合 (たとえば、空であるか、すべて句読点である場合) に初期化されているため、使用しようとしてもクラッシュしません。lastWord
.