Многие ответчики дали объяснение do{(...)break;}while(false)
. Я хотел бы дополнить эту картину еще одним примером реальной жизни.
В следующем коде мне пришлось установить перечислитель operation
на основе адреса, на который указывает указатель data
. Поскольку ящик коммутатора может использоваться только для скалярных типов, я сначала сделал это неэффективно
if (data == &array[o1])
operation = O1;
else if (data == &array[o2])
operation = O2;
else if (data == &array[on])
operation = ON;
Log("operation:",operation);
Но поскольку Log () и остальная часть кода повторяются для любого выбранного значения операции, я блуждал, как чтобы пропустить остальные сравнения, когда адрес уже обнаружен. И вот здесь do{(...)break;}while(false)
пригодится.
do {
if (data == &array[o1]) {
operation = O1;
break;
}
if (data == &array[o2]) {
operation = O2;
break;
}
if (data == &array[on]) {
operation = ON;
break;
}
} while (false);
Log("operation:",operation);
Можно задаться вопросом, почему он не мог сделать то же самое с break
в выражении if
, например:
if (data == &array[o1])
{
operation = O1;
break;
}
else if (...)
break
взаимодействует исключительно с ближайшим замкнутым контуром или переключателем, будь то тип for
, while
или do .. while
, поэтому, к сожалению, это не сработает.
Вам необходимо вернуть предмет, который должен быть обработан. Лучше всего будет создать новую функцию и вернуть элемент.
_renderItem = (item, index) => {
console.log(item, index);
return (
<View key={index}>
<View>
<Text>Time ago</Text>
<Text>@username</Text>
</View>
<View>
<Image
source={{
// uri:
// "https://source.unsplash.com/random/500x" +
// Math.floor(Math.random() * 800 + 500)
uri: "https://source.unsplash.com/random/500x800/"
}}
style={styles.profilephoto}
/>
</View>
<View>
<Text>Caption of post</Text>
<Text>View all Comments</Text>
</View>
</View>
)
}
render() {
let i = 0;
return (
<View style={styles.container}>
<View style={styles.header}>
<Text> feed </Text>
</View>
<FlatList
refreshing={this.state.refresh}
onRefresh={this.loadNew}
data={this.state.photo_feed}
keyExtractor={(item, index) => "" + index}
style={styles.flatlist}
renderItem={this._renderItem}
/>
</View>
);
}