gpt4 book ai didi

SwiftUI - 使用带有提供值的枚举的选择器并返回正确的标签()

转载 作者:行者123 更新时间:2023-12-04 13:14:52 31 4
gpt4 key购买 nike

我有一个问题,不知道如何解决。我有几个返回字符串的枚举,用于项目中的每个位置,在单独的 textPhrases 文件中。

我想用其中的一些来填充一个选择器(分段)。

我想了解应该如何使用和设置标签元素。

我想有一个静态变量,它返回一个带有 [String:Int] [rawCaseValue, index] 的元组,但出现以下错误 - Type '(String, Int)' cannot conform to 'Hashable' ;只有结构/枚举/类类型可以符合协议(protocol)

这是我的代码示例。第二个选择器工作完美,但我想重构它以使用枚举提供的字符串。

//  TextPhrases.swift
// Zinnig

import SwiftUI

enum SalutationClient: String, CaseIterable {
case noChoice = "…"
case sir = "Meneer"
case mrs = "Mevrouw"
case miss = "Mejuffrouw"

static let all = SalutationClient.allCases.map { $0.rawValue }

static var allIndexed : [(String, Int)]{
var tupleArray: [(String, Int)] = []
var ind : Int = 0

for salut in SalutationClient.all //allCases.map({ $0.rawValue })
{
tupleArray.append( (salut, ind))
ind += 1
}
return tupleArray
}
}


// PersonContentView.swift
// Zinnig


/// Main Person view
struct PersonContentView: View {

@State private var selectedSalutation = 0

/// next line will be removed and replace by an enum with Strings
@State private var dayPart: [String] = ["…", "ochtend", "middag", "avond", "nacht"]
@State private var selectedDayPart = 0

...
Form {
Picker(selection: $selectedSalutation, label: Text("Aanspreken met;")) {
ForEach ( SalutationClient.allIndexed, id: \.self ) { salutTuple in
Text((salutTuple.0)).tag((salutTuple.1))
}
}.pickerStyle(SegmentedPickerStyle())

Picker(selection: $selectedDayPart, label: Text("Selecteer een dagdeel")) {
ForEach(0 ..< dayPart.count) {
Text(self.dayPart[$0]).tag($0)
}
}.pickerStyle(SegmentedPickerStyle())
}

错误是 - Type '(String, Int)' cannot conform to 'Hashable';只有结构/枚举/类类型可以符合协议(protocol)

我应该如何着手让它工作?

谢谢

最佳答案

下面的代码确实解决了我的问题。

//  TextPhrases.swift
// Zinnig

enum SalutationClient: String, CaseIterable, Hashable {
case noChoiceMade = "…"
case sir = "Meneer"
case mrs = "Mevrouw"
case miss = "Mejuffrouw"

static let all = SalutationClient.allCases.map { $0.rawValue }

struct TupleStruct: Hashable {
var salutation: String
var index: Int
}

static var allIndexed : [TupleStruct]{
var tupleArray : [TupleStruct] = []
var ind : Int = 0

for salut in SalutationClient.all //allCases.map({ $0.rawValue })
{
tupleArray = tupleArray + [TupleStruct(salutation: salut, index: ind )]
ind += 1
}
print(tupleArray)
return tupleArray
}
}

// PersonContentView.swift
// Zinnig

Picker(selection: $selectedSalutation, label: Text("Select een persoon type;")) {
ForEach(SalutationClient.allIndexed, id: \.self) { salut in
Text(salut.salutation).tag(salut.index)
}
}.pickerStyle(SegmentedPickerStyle())

如果有人对此有意见,请告诉我。我总是乐于接受更好的新事物。

关于SwiftUI - 使用带有提供值的枚举的选择器并返回正确的标签(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61485553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com