Хорошо это может быть немым вопросом дня, но предположение у меня есть класс с:
NSDecimalNumber *numOne = [NSDecimalNumber numberWithFloat:1.0];
NSDecimalNumber *numTwo = [NSDecimalNumber numberWithFloat:2.0];
NSDecimalNumber *numThree = [NSDecimalNumber numberWithFloat:3.0];
Почему не может я иметь функцию, которая добавляет те числа:
- (NSDecimalNumber *)addThem {
return (self.numOne + self.numTwo + self.numThree);
}
Я приношу извинения заранее за то, что был идиотом, и Спасибо!
Вы не можете делать то, что хотите, потому что ни C, ни Objective C не имеют перегрузки операторов. Вместо этого вы должны написать:
- (NSDecimalNumber *)addThem {
return [self.numOne decimalNumberByAdding:
[self.numTwo decimalNumberByAdding:self.numThree]];
}
Если вы хотите поиграть с Objective-C ++ (переименуйте свой источник в .mm), тогда вы можете написать:
NSDecimalNumber *operator + (NSDecimalNumber *a, NSDecimalNumber *b) {
return [a decimalNumberByAdding:b];
}
Теперь вы можете написать:
- (NSDecimalNumber *)addThem {
return self.numOne + self.numTwo + self.numThree;
}
Go C ++!
NSDecimalNumber - это класс Objective C, который при создании экземпляра создает объект, содержащий число. Вы получаете доступ к объекту (и объектам в целом) только с помощью методов. В Objective C нет способа напрямую выражать арифметические действия по отношению к объектам, поэтому вам нужно сделать один из трех вызовов:
Вы можете:
- (NSDecimalNumber *)addThem {
return [[self.numOne decimalNumberByAdding:numTwo] decimalNumberByAdding:numThree];
}
Проблема с вашим примером заключается в том, что на самом деле self.numOne на битовом уровне является указателем на объект. Таким образом, ваша функция вернет некоторую случайную ячейку памяти, а не сумму.
Если Objective-C поддерживал перегрузку операторов в стиле C ++, кто-то мог бы определить +
при применении к двум объектам NSDecimalNumber как псевдоним для decimalNumberByAdding:
. Но это не так.
[[numOne decimalNumberByAdding:numTwo] decimalNumberByAdding:numThree]
См. Функцию NSDecimalAdd
(а также NSDecimalMultiply, NSDecimalDivide, NSDecimalSubtract).