gpt4 book ai didi

objective-c - Objective - C,使用 NSDecimalNumberHandler 和 NSDecimalNumberBehaviors 协议(protocol)

转载 作者:行者123 更新时间:2023-12-01 16:56:54 24 4
gpt4 key购买 nike

对于那些学习 Objective-C 的人来说,计算器课似乎是一个流行的起点。所以在我的“计算器”类中,我定义了我的加法函数以使用“decimalNumberByAdding:withBehavior:”方法。 '_behavior' 在 init 方法中定义。描述的代码如下所示:

-(id)init
{
if ((self = [super init]))
{
// Yes, raise errors (or exceptions)
// on all of these cases,
// and control the scale (number precision).
_behavior = [NSDecimalNumberHandler
decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:NSDecimalNoScale
raiseOnExactness:YES
raiseOnOverflow:YES
raiseOnUnderflow:YES
raiseOnDivideByZero:YES];
}
return self;
}

// My addition method
-(NSDecimalNumber *)addNum1:(NSDecimalNumber *)num1
andNum2:(NSDecimalNumber *)num2
{
NSDecimalNumber *result = [num1 decimalNumberByAdding:num2
withBehavior:_behavior];
return result;
}

要正确使用 NSDecimalNumberBehaviors 协议(protocol),需要实现 3 个方法:
'- 舍入模式',
'- 规模',和
'- exceptionDuringOperation:error:leftOperand:rightOperand:'
(但是,roundingMode 和 scale 不是已经在我上面的 NSDecimalNumberHandler 中指定的,称为“_behavior”吗?)。

使用此协议(protocol)的动机是如果出现“_behavior”中定义的错误之一(例如溢出或精度丢失错误),则引发并处理异常。

在搜索网络和 Apple 的文档后,尚不清楚如何使用 NSDecimalNumberBehaviors 协议(protocol),以及如何正确引发和处理上面“_behavior”中描述的错误(与“_behavior”相比,协议(protocol)实现似乎包括冗余' 宣言)。

使用 NSDecimalNumberBehaviors 协议(protocol)并引发和处理“_behavior”中定义的错误的正确方法是什么?也许一个例子最有帮助。谢谢 : )

- 更新:

再次查看文档后,我现在看到 NSDecimalNumberHandler 采用了 NSDecimalNumberBehaviors 协议(protocol)。所以这意味着我只需要正确初始化和使用 NSDecimalNumberHandler 。

添加除法方法后(为了测试除以 0 异常),我看到代码看起来更像这样:
-(id)init
{
if ((self = [super init]))
{
// Yes, raise errors (or exceptions)
// on all of these cases,
// and control the scale (number precision).
_behavior = [NSDecimalNumberHandler alloc]
initWithRoundingMode:NSRoundPlain
scale:NSDecimalNoScale
raiseOnExactness:YES
raiseOnOverflow:YES
raiseOnUnderflow:YES
raiseOnDivideByZero:YES];
}
return self;
}

// My division method
-(NSDecimalNumber *)divideNum1:(NSDecimalNumber *)num1 byNum2:(NSDecimalNumber *)num2
{
NSDecimalNumber *result = [num1 decimalNumberByDividingBy:num2
withBehavior:_behavior];
return result;
}

实际上,除以 0 会引发未捕获的异常并终止程序。好的,这样更好。我如何捕获抛出的异常,以及在语法上,在哪里?

最佳答案

使用@try , @catch ObjC 文字。将您的部门代码包装在 @try 中在 @catch 中阻止并捕获捕获的异常堵塞。

关于objective-c - Objective - C,使用 NSDecimalNumberHandler 和 NSDecimalNumberBehaviors 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com