检查可选数组是不是包含元素和显示视图
Posted
技术标签:
【中文标题】检查可选数组是不是包含元素和显示视图【英文标题】:Check if optional array contains element and display view检查可选数组是否包含元素和显示视图 【发布时间】:2022-01-10 15:08:35 【问题描述】:在 SwiftUI 中,我通过 API 将对象提取到可选数组中。然后,在视图中,我尝试确定加载视图时该数组是否包含一组可能的元素。
如果数组包含该元素,我将为其显示一个单独的视图。如果不是,我不会显示它。
如何检查该可选数组是否包含特定元素?
例如,我想检查是否 projectType.landscapes?包含一个“覆盖”条目。此外,ProjectType.Landscapes.types 数组将包含与当前 projectType.landscape 选项相对应的字符串值,例如 ["mulching"、"clearing"、"treeCare"] 或只是 ["mulching"]。
这是我的数据结构:
// MARK: - ProjectType
struct ProjectType: Codable
let landscapes: [Landscape]?
let generalConstructions: [GeneralConstruction]?
// MARK: - GeneralConstruction
struct GeneralConstruction: Codable
let id: Int
// MARK: - Landscape
struct Landscape: Codable
let id: Int
let types: [String]
let mulching: Mulching?
let clearing: Clearing?
let planting: Planting?
let treeCare: TreeCare?
let other: Other?
// MARK: - Clearing
struct Clearing: Codable
let id: Int
let clearingArea, removeTrees, treeCount, approxTreeHeight: String
let treeStumps: String
// MARK: - Mulching
struct Mulching: Codable
let id: Int
let mulchingType, currentlyInPlace, currentlyInPlaceCustom, roomLength: String
let roomWidth, color, customColor, length: String
let approximateLength: String
// MARK: - Other
struct Other: Codable
let id: Int
let otherDetails: String
// MARK: - Planting
struct Planting: Codable
let id: Int
let designPlan, treeLargerThanFiveFeet, plantCount: String
// MARK: - TreeCare
struct TreeCare: Codable
let id: Int
let careDescription: String
这里是我检查景观类型是否存在的地方:
import SwiftUI
struct LandscapeSpecificsView: View
let projectType: ProjectType
var body: some View
VStack
Text("Here is the landscape specific project info. I'll show mulching or clearing, or treeCare, etc.")
struct MulchingView: View
var body: some View
Text("Here is the mulching info")
struct ClearingView: View
var body: some View
Text("Here is the clearing info")
struct PlantingView: View
var body: some View
Text("Here is the planting info")
struct TreeCareView: View
var body: some View
Text("Here is the treecare info")
struct LandscapeOtherView: View
var body: some View
Text("Here is the landscape other info")
【问题讨论】:
有什么问题? 对不起,问题还不清楚。您询问数组是否包含元素的方式是使用(准备好)contains
。有什么问题?
@matt 我无法使用 contains 让它工作。它是数组中的数组。 ProjectType.landscapes 是一个数组,而 types 是该数组内的一个数组。它也是一个可选的,所以我不知道如何检查它。
先问问自己。你真的需要将你的数组声明为可选的吗?如果它们永远不会为零,那么将它们声明为可选是没有任何意义的。
@LeoDabus 是的,它们需要是可选的。它们可能确实为零。
【参考方案1】:
首先,您可以使用“可选绑定”方法,例如“if let”或“guard let”,或者简单地使用数组计数来确保数组具有值。 之后,您可以在 Array 上使用多个选项,例如 'contains(_:)' apple document
if let landScapes = project.landscapes
if landScapes.contains(where: $0.mulching != nil)
【讨论】:
你能用上面的数据结构写一个例子吗? @soroush_araste。如果我尝试:“ if ((projectType.landscapes?.contains(where: “mulching”)) != nil) MulchingView() “我收到此错误:无法将“String”类型的值转换为预期的参数类型“ (横向) throws -> Bool' if letlandScapes = project.landscapes if landScapes.contains(where: $0.mulching != nil) 成功了,谢谢。 不客气。以上是关于检查可选数组是不是包含元素和显示视图的主要内容,如果未能解决你的问题,请参考以下文章