Вопрос
Может кто-нибудь объяснить различия между этими типами аргументов? Кроме того, если возможно, поставьте соответствующие прецеденты с использованием кода (это стоит 1000 слов).
Nota bene
Пожалуйста, дайте мне знать в комментариях, если есть какие-либо требования для получения дополнительной информации.
Фон
Я пытаюсь понять любые различия между следующими конструкциями и понять соответствующие варианты использования (с примерами, если они есть). Я искал SO, Google, et, al. (блогосфера), не найдя удовлетворительного ответа.
При написании объекта хранилища данных я натолкнулся на следующие инициализаторы для NSPredicate:
В файле заголовка Swift (1.2):
Комментарий в блоге указывает на следующее использование va_list в Objective-C
+ (void) log:(NSString *) format arguments:(va_list) argList
{
[self logString: [NSString stringWithFormat: format arguments:
argList]];
}
+ (void) log:(NSString *) format, ...
{
va_list argList;
va_start(argList, format);
{
[self log: format arguments: argList];
}
va_end(argList);
}
CVarArgType является протоколом и может использоваться следующим образом в соответствии с файлом заголовка Swift.
В моем пользовательском классе у меня есть следующий прецедент:
/* Finds an array of entity in the MOC if any exists using an optional
* predicate with an array of arguments
*
* Usage:
* eg. var items = CustomEntity.findInStore(dbStore, predicate:
* NSPredicate(format: "(attributeName IN %@)", argumentArray:
* ["value1","value2","value3"])) as? [CustomEntity]
*/
EDIT:
Читатели учтут, что параметр argumentArray был неправильно использован, как описано в моем пользовательском классе. Чтобы правильно использовать этот инициализатор, обратите внимание на следующее из документации Apple:
Что приводит меня к этому использованию:
NSPredicate(format: "(%K != %@ AND %K = %@)", argumentArray: ["key1","value1","key2","value2"])