我正在关注 Flutter 的 PR 并遇到了以下代码:
if (chunkCallback != null) {
chunkCallback!(0, 100);
}
Run Code Online (Sandbox Code Playgroud)
后面的感叹号是什么意思chunkCallback
?我在 Google 上搜索的任何东西都不起作用。
chunkCallback
is a nullable reference to a function.
If you are sure that chunkCallback
can't be null at runtime you can "Cast away nullability" by adding ! to it to make compiler happy
typedef WebOnlyImageCodecChunkCallback = void Function(
int cumulativeBytesLoaded, int expectedTotalBytes);
...
class Class1 {
final WebOnlyImageCodecChunkCallback? chunkCallback;
Class1(this.chunkCallback);
void test() {
if (chunkCallback == null) {
throw Exception("chunkCallback is null");
}
chunkCallback!.call(0, 100);
}
}
Run Code Online (Sandbox Code Playgroud)
Esentially, ! in this case is a syntactic sugar for
(chunkCallback as WebOnlyImageCodecChunkCallback).call(0, 100);
Run Code Online (Sandbox Code Playgroud)
小智 7
我认为这是“抛弃可空性”的速记语法,根据文档:https : //dart.dev/null-safety/understanding-null-safety#null-assertion-operator