Jam*_*esH 2 logical-operators swiftui
我正在研究 Landmarks SwiftUI 教程https://developer.apple.com/tutorials/swiftui/handling-user-input。我对逻辑运算符的使用感到困惑
landmarks.filter { landmark in
(!showFavoritesOnly || landmark.isFavorite)
}
Run Code Online (Sandbox Code Playgroud)
我试图理解这个逻辑如何返回过滤的地标。我很确定!运算符反转showFavoritesOnly操作数和 || 如果闭包中任一方为真,则地标.isFavorite上的运算符使语句为真,但由于某种原因,就返回的内容而言,目前我无法理解应该发生的情况。如果有人能澄清我将非常感激。
这是上下文文件:
import SwiftUI
struct LandmarkList: View {
@State private var showFavoritesOnly = false
var filteredLandmarks: [Landmark] {
landmarks.filter { landmark in
(!showFavoritesOnly || landmark.isFavorite)
}
}
var body: some View {
NavigationView {
List(filteredLandmarks)
{ landmark in
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}
}
.navigationTitle("Landmarks")
}
}
}
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
LandmarkList()
}
}
Run Code Online (Sandbox Code Playgroud)
\n\n我很确定!运算符反转 showFavoritesOnly操作数和|| 当任一方为 true 时,landmark.isFavorite 上的运算符使语句为 true
\n
你是完全正确的。
\n\n\n但由于某种原因,就返回的内容而言,我目前无法理解应该发生的情况。
\n
该filter(_:)方法允许您过滤数组(删除不满足条件的元素)。
它需要一个闭包,isIncluded. 对于数组中的每个元素调用此闭包一次,并将当前元素传递到参数中:
/// \xe2\x86\x93 the current element in the array\nlandmarks.filter { landmark in }\nRun Code Online (Sandbox Code Playgroud)\n这个闭包必须返回一个Bool,它表示是否应保留该元素。
true,则意味着保留该元素false,则删除该元素在您的实现中,您将保留为showFavoritesOnlyfalse 的元素或isFavoritetrue 的元素。
landmarks.filter { landmark in\n (!showFavoritesOnly || landmark.isFavorite) /// return the Bool\n}\nRun Code Online (Sandbox Code Playgroud)\n也许您对为什么没有 return 语句感到困惑......
\nlandmarks.filter { landmark in\n return (!showFavoritesOnly || landmark.isFavorite)\n}\nRun Code Online (Sandbox Code Playgroud)\n原因是因为return只有一个表达式时,关键字是可选的。如果你做了类似的事情:
landmarks.filter { landmark in\n let elementShouldBeKept = (!showFavoritesOnly || landmark.isFavorite)\n return elementShouldBeKept\n}\nRun Code Online (Sandbox Code Playgroud)\n...那么你需要return.
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |