扩展可以给现有的类,结构体,还有枚举添加新的嵌套类型:
extension Int {
enum Kind {
case negative, zero, positive
}
var kind: Kind {
switch self {
case 0:
return .zero
case let x where x > 0:
return .positive
default:
return .negative
}
}
}
这个例子给 Int
添加了一个新的嵌套枚举。这个枚举叫做 Kind
,表示特定整数所代表的数字类型。具体来说,它表示数字是负的、零的还是正的。
这个例子同样给 Int
添加了一个新的计算型实例属性,叫做 kind
,它返回被操作整数所对应的 Kind
枚举 case 分支。
现在,任意 Int
的值都可以使用这个嵌套类型:
func printIntegerKinds(_ numbers: [Int]) {
for number in numbers {
switch number.kind {
case .negative:
print("- ", terminator: "")
case .zero:
print("0 ", terminator: "")
case .positive:
print("+ ", terminator: "")
}
}
print("")
}
printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
// 打印“+ + - 0 - 0 + ”
方法 printIntegerKinds(_:)
,使用一个 Int
类型的数组作为输入,然后依次迭代这些值。对于数组中的每一个整数,方法会检查它的 kind
计算型属性,然后打印适当的描述。
注意
number.kind
已经被认为是Int.Kind
类型。所以,在switch
语句中所有的Int.Kind
case 分支可以被缩写,就像使用.negative
替代Int.Kind.negative.
。