Некоторые объекты должны выполнить произвольные "события", достигающие некоторого условия.
, насколько произвольный эти события? Они могут считаться, присвоенный идентификатор и отображаться на соотносимо?
public class Command<T> where T : ISerializable
{
T _target;
int _actionId;
int _conditionId;
public Command<T>(T Target, int ActionId, int ConditionId)
{
_target = Target;
_actionId = ActionId;
_conditionId = ConditionId;
}
public bool FireRule()
{
Func<T, bool> theCondition = conditionMap.LookupCondition<T>(_conditionId)
Action<T> theAction = actionMap.LookupAction<T>(_actionId);
if (theCondition(_target))
{
theAction(_target);
return true;
}
return false;
}
}
The following seems to work, but requires conversion from your NSString's to C-strings.
NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank];
NSLog(@"%@", str);
Don't know why the field width is being ignored when trying to use an NSString.
Да, точно так же, как printf
.
Согласно документация , stringWithFormat:
подчиняется спецификации IEEE printf
, которая допускает все виды изменений отдельных аргументов. В документации есть ограниченный набор этой информации, но они связаны со спецификацией OpenGroup printf
для Unix , чтобы предоставить полную информацию (стоит прочитать, вы можете выполнить множество трюков с спецификаторы формата).
Попробуйте это, чтобы получить именно то, что вы вставили выше:
NSString *word = @"butterfly";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-11s rank:%u", [word UTF8String], rank];
Вот пример того, как я форматирую свои отладочные данные (я не использую NSLog
, я оборачиваю печать к стандартной ошибке, чтобы получить файл и строку):
fprintf(stderr, "%s | %30s:%-5d | %s", [[[NSDate date] description] UTF8String],
[fileName UTF8String], line, [body UTF8String]);