我有一个扑动应用程序。我使用VSCode。当我执行以下操作时,我在两个地方("问题"区域和"调试控制台")报告了以下错误:
错误代码:
bool fff = (preferences?.getBool("_wantSpaces"));
错误味精:
message": " bool类型的值?'不能赋值给bool类型的变量。nTry改变变量的类型,或者将右边的类型转换为'bool'.",
如果我像这样修改代码,两个错误都消失了:好的代码:
bool fff = (preferences?.getBool("_wantSpaces")) ?? false;
但是,如果我像这样修改代码,只有"问题"中的错误会消失:半好代码:
bool fff = (preferences?.getBool("_wantSpaces"))!;
问题:为什么错误报告在2个地方?我更喜欢用第二种形式(带!),但是我不能
感谢这是因为你使用了?这意味着它可以为空。如果preferences以某种方式变为空,getBool不起作用,整个东西将为空,但你在这里告诉编译器的是(preferences?.getBool("_wantSpaces"))!
这意味着整个值永远不会为空,但这不是真的,因为preferences在你定义时是可空的因此整个东西有可能为空。
如果您正在使用shared_preferences,则getBool
是可空的,并且您将其分配给不可空的bool。如果你想修复你的检查错误,你应该使fff
为空,以及:
bool? fff = preferences?.getBool("_wantSpaces");
或者使用前面所述的默认值:
bool fff = preferences?.getBool("_wantSpaces") ?? false;