我在自己的文件(“ MyEnum.swift”)中拥有了这个枚举(Xcode 10 / Swift 5):
enum MyEnum: Int, CaseIterable {
case A = 0
case B = 1
case C = 2
case D = 3
case E = 4
//Each case needs its own number and description!
var description: String {
switch self {
case .A:
return "abc"
case .B:
return "bcd"
case .C:
return "cde"
case .D:
return "def"
case .E:
return "efg"
}
}
}
...,并想将说明添加到PickerView
中。我知道如何为视图设置功能,但是现在我不得不统计枚举案例并添加描述。
根据documentation和其他问题,添加CaseIterable
应该可以拨打电话
MyEnum.allCases.count
...但是我只能从枚举文件中访问allCases
。从外部(因此从我的ViewController类中),我只能调用MyEnum.AllCases
,它没有count
,老实说,我什至不确定AllCases
到底返回了什么(这不是普通的数组,可以在count
上使用)。
将此代码(source)添加到枚举文件中,至少可以计算出这种情况:
static let count: Int = {
var max: Int = 0
while MyEnum(rawValue: max) != .none { max += 1 }
return max
}()
...但是使用Swift 4.2+应该不是一种更简单的方法吗?
如何获取案件说明列表,以用PickerView填充(例如“ abc”,“ bcd”,...-最好不对其进行硬编码)?
答案 0 :(得分:3)
我尝试了1个文件:
enum TestEnum: CaseIterable {
case test1
case test2
}
在我写的另一个类的另一个文件中:
let count = TestEnum.allCases.count
它有效,但是我注意到当我键入“ allCases”时没有显示
我需要手动编写
答案 1 :(得分:1)
allCases
被声明为public
,因此您应该能够从另一个文件访问它:
/// A collection of all values of this type.
public static var allCases: Self.AllCases { get }
像这样:
let descriptions = MyEnum.allCases.map { $0.description }
尝试清理项目并重建。
此外,如果Xcode的自动完成列表中未包含某些内容,则并不意味着您无法访问该内容。根据我自己的经验,Xcode的完整列表包含大量错误。
答案 2 :(得分:0)
出于完整性考虑,如果allCases
根本不起作用(即使重新启动后),请将其添加到枚举文件中:
static let allValues = [MyEnum.A, MyEnum.B, MyEnum.C, MyEnum.D, MyEnum.E]
它经过硬编码,但至少可以让您访问所有内容:
MyEnum.allValues.count
MyEnum.allValues[0].description
MyEnum.allValues[0].rawValue
答案 3 :(得分:-1)
我也遇到了同样的问题。最终的工作是重新启动xcode。