谁能解释一下两者之间的区别 使用这个:
final block = blocks?.first;
还有这个:
final block = blocks!.first;
其中 blocks
是:
List<Block>? blocks
答案 0 :(得分:1)
当您使用import React, { Component } from "react";
import { Map, GoogleApiWrapper, Marker } from "google-maps-react";
export class MapContainer extends Component {
state = {
center: {
lat: 40.854885,
lng: -88.081807
},
markers: null,
};
fetchPlaces = (mapProps, map) => {
let coordinates = [];
const { google } = mapProps;
const service = new google.maps.places.PlacesService(map);
var request = {
location: this.state.center,
radius: "500",
query: "restaurant"
};
service.textSearch(request, (results, status) => {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
//console.log(results[i]);
coordinates.push(results[i]);
}
this.setState({ markers: coordinates });
}
});
};
clickMarker = (props, marker) => {
console.log(props.placeId);
};
render() {
if (!this.props.loaded) return <div>Loading...</div>;
return (
<div>
<Map
className="map"
google={this.props.google}
center={{
lat: this.state.center.lat,
lng: this.state.center.lng
}}
onReady={this.fetchPlaces}
style={{ height: "100%", position: "relative", width: "100%" }}
zoom={8}
>
{this.state.markers != null &&
this.state.markers.map(coords => (
<Marker
key={coords.place_id}
position={coords.geometry.location}
onClick={this.clickMarker}
placeId={coords.place_id}
/>
))}
</Map>
</div>
);
}
}
export default GoogleApiWrapper({
apiKey: "YOUR_API_KEY"
})(MapContainer);```
时,blocks?.first
的值可以为空也可以不为空,但是当您使用blocks
时,您通知编译器您确定blocks!.first
不会为空。
blocks
实际上意味着您完全确定 final block = blocks!.first;
在块分配之前已初始化。
同样在 List<Block>? blocks
中,final block = blocks?.first;
可以为空,但在 block
中,final block = blocks!.first;
不可为空。
block