Swift 是否支持新数据类型和代数数据类型?
Does Swift support new data types and algebraic data types?
在Swift和许多其他语言中,内置了字符串、整数等数据类型...
例如,在 Haskell 中,可以使用关键字 data 来创建您自己的数据类型。
data Shape = Circle Float Float Float | Rectangle Float Float Float
Float
但是,我不确定Swift是否有类似的方法,或者它是否支持新的数据类型。
是的,Wikipedia 将 Swift 列为支持代数数据类型的语言之一。
仅仅引用维基百科并不能令人信服:D,所以让我们在 Swift 中显示您的 Shape
类型。这是通过具有关联值的枚举实现的。
enum Shape {
case circle(Float, Float, Float)
case rectangle(Float, Float, Float, Float)
}
Circle 1 2 3
in Haskell 将转换为 Shape.circle(1, 2, 3)
in Swift.
您还可以为这些关联值添加标签:
enum Shape {
case circle(centerX: Float, centerY: Float, radius: Float)
case rectangle(x: Float, y: Float, width: Float, height: Float)
}
详细了解具有关联类型的枚举 here。
另一个例子是 Haskell 列表类型:
indirect enum List<T> {
case `nil`
case cons(T, List<T>)
}
请注意,与 Haskell 不同的是, 实际上 在 Swift 中并不是这样实现列表的。
在Swift和许多其他语言中,内置了字符串、整数等数据类型...
例如,在 Haskell 中,可以使用关键字 data 来创建您自己的数据类型。
data Shape = Circle Float Float Float | Rectangle Float Float Float Float
但是,我不确定Swift是否有类似的方法,或者它是否支持新的数据类型。
是的,Wikipedia 将 Swift 列为支持代数数据类型的语言之一。
仅仅引用维基百科并不能令人信服:D,所以让我们在 Swift 中显示您的 Shape
类型。这是通过具有关联值的枚举实现的。
enum Shape {
case circle(Float, Float, Float)
case rectangle(Float, Float, Float, Float)
}
Circle 1 2 3
in Haskell 将转换为 Shape.circle(1, 2, 3)
in Swift.
您还可以为这些关联值添加标签:
enum Shape {
case circle(centerX: Float, centerY: Float, radius: Float)
case rectangle(x: Float, y: Float, width: Float, height: Float)
}
详细了解具有关联类型的枚举 here。
另一个例子是 Haskell 列表类型:
indirect enum List<T> {
case `nil`
case cons(T, List<T>)
}
请注意,与 Haskell 不同的是, 实际上 在 Swift 中并不是这样实现列表的。