Классический шаблон Objective-C будет принимать аргумент аргумента селектора (SEL
) и объекта (id
):
-(double) GenerateSellPriceWithRNG:(id)rngObject selector:(SEL)rngSelector
double randomNumber;
randomNumber = [rngObject performSelector:rngSelector];
return value*randomNumber;
}
и позвоните по номеру
[self GenerateSellPrinceWithRNG:self selector:@selector(generateRandomNumber)];
Современная практика, вероятно, будет принимать параметр блока (double (^)()
). Синтаксис для блока немного уродливее, но мощность, которую он приносит, полезна в этом сценарии. Вы получаете лучшую проверку типов из компилятора и можете легко сгенерировать встроенный блок там, где это удобно, а не писать целый класс и метод.
В этом случае вы можете объявить
-(double) GenerateSellPriceWithRNG:(double (^)())rngBlock {
double randomNumber;
randomNumber = rngBlock();
return value*randomNumber;
}
и позвоните по номеру
[self GenerateSellPriceWithRNG:^{ return [self generateRandomNumber]; }];
или с любым другим блоком, который возвращает double
.