Как насчет одноэлементного объекта, который будет обрабатывать поколения токенов? что-то похожее на это:
const tokenGenerator ={
getTokenPromise: null,
token: null,
getToken(){
if (!this.getTokenPromise){
this.getTokenPromise = new Promise(resolve=>{
/*supposed to be a http request*/
if (!this.token){
setTimeout(()=>{
this.token = 'generated';
resolve(this.token);
},0)
}else{
resolve(this.token);
}
})
}
return this.getTokenPromise;
}
вы можете ссылаться на этот же объект от перехватчиков.
Следующий код является прямым из документации Apple относительно абзацев и разрывов строки:
unsigned length = [string length];
unsigned paraStart = 0, paraEnd = 0, contentsEnd = 0;
NSMutableArray *array = [NSMutableArray array];
NSRange currentRange;
while (paraEnd < length)
{
[string getParagraphStart:¶Start end:¶End
contentsEnd:&contentsEnd forRange:NSMakeRange(paraEnd, 0)];
currentRange = NSMakeRange(paraStart, contentsEnd - paraStart);
[array addObject:[string substringWithRange:currentRange]];
}
Я не на 100% уверен, будет ли это работать с 10,4
Я сначала заменю весь "\r" "\n", затем заменю весь "\n\n" "\n" и затем сделаю componentsSeparatedByString:@" \n".
Согласно ссылке класса NSString, NSString передают componentsSeparatedByCharactersInSet: доступно в OS X 10.5 или позже. Необходимо использовать componentsSeparatedByString:.
Прямо из моего проекта:
NSString * fileContents = [NSString stringWithContentsOfFile:pathToFile encoding:NSUTF8StringEncoding error:nil];
NSMutableArray * fileLines = [[NSMutableArray alloc] initWithArray:[fileContents componentsSeparatedByString:@"\r\n"] copyItems: YES];
Я не уверен, как сделать его, это автоматически работает с любым типом строки, заканчивающейся в 10,4.