Junkor

用枚举代替布尔(Enums instead of Booleans)

用枚举代替布尔(Enums instead of Booleans)

文章翻译自objc,原文连接:『Enums instead of Booleans

布尔在很多语言中都是基本类型数据之一。在swift和Object-C中,我们在很多地方会使用到它。不过,为了使代码逻辑更清晰,有时我们会引入一种新的类型代替。例如,你可以重新考虑一些控制UITableView选择行为的方式:

var allowsSelection: Bool
var allowsMultipleSelection: Bool

来看一下这段代码,当tableView允许多选但禁止单选的时候,它的描述显得很苍白无力。两个布尔类型的值最多可以表示4种状态,尽管有时候可能只用到其中的三个。如果同样的场景出现在我们的代码中,我们可以使用单个枚举而不是多个布尔值:

enum SelectionMode {
	case None
	case Single
	case Multiple
}

这里定义了三个独立的选择操作使我们可以用一个属性代替两个布尔值,并且我们不必处理多个if条件分支,取而代之的是一个针对不同枚举的switch语句。

有些时候,采用这中方式针对单个的布尔值也是有意义的。例如,我们的app里有要上传资源到服务器的功能,并且部分资源是共有的,部分是私有的。我们声明一个新的enum来代替bool:

enum AccessControl {
	case Public
	case Private
}

假设我们用的是之前的方式,现在有一个bool值isPublic,我们想要在其为false时做一些操作:

if !isPublic {
	// Private asset
	...
}

如果我们采用的是enum方式,我们可以这样写:

if access == .Private {
}

这样的话,可读性会更胜一筹。