gpt4 book ai didi

swift - 嵌套和关联的枚举值 Swift

转载 作者:可可西里 更新时间:2023-10-31 23:44:32 30 4
gpt4 key购买 nike

在处理表格或 Collection View 时,NSHipster 认可的最佳实践之一是使用枚举来表示每个部分,如下所示:

typedef NS_ENUM(NSInteger, SomeSectionType) {
SomeSectionTypeOne = 0,
SomeSectionTypeTwo = 1,
SomeSectionTypeThree = 2
}

这使得执行 switch 语句或 ifs 变得非常容易:

if(indexPath.section == SomeSectionTypeOne) {
//do something cool
}

对于包含静态内容的部分,我扩展了概念以包括每个项目的枚举:

typedef NS_ENUM(NSInteger, SectionOneItemType) {
ItemTypeOne = 0,
ItemTypeTwo = 1
}

if(indexPath.section == SomeSectionTypeOne) {
switch(indexPath.item) {
case SectionOneItemType:
//do something equally cool
default:
}
}

在 Swift 中,我想复制相同的行为,只是这次要利用嵌套枚举。到目前为止,我已经能够想出这个:

enum PageNumber {
enum PageOne: Int {
case Help, About, Payment
}
enum PageTwo: Int {
case Age, Status, Job
}
enum PageThree: Int {
case Information
}
case One(PageOne)
case Two(PageTwo)
case Three(PageThree)
}

但我看不出如何从 NSIndexPath 开始并初始化正确的大小写,然后使用 switch 语句提取值。

最佳答案

不要认为您可以使用嵌套枚举来确定节和行单元格的来源。因为关联值和原始值不能在 Swift 枚举中共存。需要多个枚举

enum sectionType: Int {
case sectionTypeOne = 0, sectionTypeTwo, sectionTypeThree
}

enum rowTypeInSectionOne: Int {
case rowTypeOne = 0, rowTypeTwo, rowTypeThree
}

//enum rowTypeInSectionTwo and so on

let indexPath = NSIndexPath(forRow: 0, inSection: 0)

switch (indexPath.section, indexPath.row) {
case (sectionType.sectionTypeOne.rawValue, rowTypeInSectionOne.rowTypeOne.rawValue):
print("good")
default:
print("default")
}

关于swift - 嵌套和关联的枚举值 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32708106/

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