Установка Путь к toolbarAssociatedXibName, с отката


У меня есть некоторый код, который я включил в проект, который я хочу освободить. Вот один такой блок:

NSString *path = nil;
if (delegate && [delegate respondsToSelector:@selector(toolbarAssociatedXibName:)]) {
    path = [delegate toolbarAssociatedXibName:_toolbar];
    if (![[NSBundle mainBundle] pathForResource:path ofType:@"nib"]) {
        IFLog(@"Delegate responded with an invalid value (%@) for `toolbarAssociatedXibName:`. Attempting default value (%@).", path, _identifier);
        path = _identifier;
    }
} else {
    path = _identifier;
}

Эквивалент псевдокод:

Variable declaration (set to null value)
If there is an option to set the variable to a custom value
    Set it to that custom value
    If the value is not valid
        Log the error
        Set the value to a specified default
Otherwise
    Set the value to a specified default

Можно ли укоротить/компактный этот блок кода? Я тоже пробовал совмещать этот блок в одну строку кода, в конечном итоге с этим:

(delegate && [delegate respondsToSelector:@selector(toolbarAssociatedXibName:)] ? !![[NSBundle mainBundle] pathForResource:[delegate toolbarAssociatedXibName:_toolbar] ofType:@"nib"] ? path = [delegate toolbarAssociatedXibName:_toolbar] : IFLog(@"Delegate responded with an invalid value (%@) for `toolbarAssociatedXibName:`. Attempting default value (%@).", [delegate toolbarAssociatedXibName:_toolbar], _identifier), path = _identifier : path = _identifier);

Что не делает абсолютно ничего для чтения. Какие-либо предложения?



Комментарии
2 ответа

В духе сухой, как насчет:

NSString *path = nil;
if (delegate && [delegate respondsToSelector:@selector(toolbarAssociatedXibName:)]) {
path = [delegate toolbarAssociatedXibName:_toolbar];
if (![[NSBundle mainBundle] pathForResource:path ofType:@"nib"]) {
IFLog(@"Delegate responded with an invalid value (%@) for `toolbarAssociatedXibName:`. Attempting default value (%@).", path, _identifier);
path = nil;
}
}
if (!path) path = _identifier;

В вашем псевдокоде:

Variable declaration (set to null value)
If there is an option to set the variable to a custom value
Set it to that custom value
If the value is not valid
Log the error
Set the value back to null
If value is null
Set the value to a specified default

5
ответ дан 15 июля 2011 в 01:07 Источник Поделиться

Может быть, вы хотите что-то вроде этого, (вы также должны хотя бы лог ошибки)

(delegate && [delegate respondsToSelector:@selector(toolbarAssociatedXibName)]) ? path = [delegate toolbarAssociatedXibName:_toolbar] : path = _identifier;

0
ответ дан 13 июля 2011 в 01:07 Источник Поделиться