我可以创建一个Swift数据类型中缀运算符吗?

时间:2017-05-24 01:51:39

标签: swift swift3 user-defined-data-types

所以,我想创建一个运算符('或'),它允许我声明一个这样的变量:

var someNum: Int or Double

这就是一个例子。我想在一些自定义数据类型上实际使用它。但是是否可以为变量声明创建一个运算符,以允许所述变量为两种类型之一,具体取决于它所分配的内容?我知道输入的数据类型是什么,但不幸的是,我现在要么为它分配一种类型的'任何'使用一堆故障安全代码或更改创建的原始数据类型。所以我只是想知道这是否可能或甚至存在。

我使用这篇文章作为参考,但从我读到的内容来看,我不确定我是否可以或如何根据我的需要实现它。 Custom Operators in Swift

提前感谢您提供的所有帮助。

3 个答案:

答案 0 :(得分:4)

你不能按照你要求的方式做到这一点。在语法上不可能在这样的声明中使用运算符。

你可以做的是使用枚举来区分种类:

enum NumericInput {
    case integral(Int)
    case fractional(Double)
}

并将其作为变量的类型:

var value: NumericInput

然后你说

value = .integral(someInteger)

答案 1 :(得分:1)

你可以用泛型来做到这一点:

trac

然后,您可以通过指定创建时的类型struct MyStruct<T> { var someNum: T } 来明确说明您要使用的dataType。

Swift做的一件事使得这一切都非常漂亮,是从构造函数派生出数据类型,所以你也可以这样做:

let a = MyStruct<Int>(someNum: 4)

答案 2 :(得分:0)

您只需使用Any类型声明值。

例如,

var myVar: Any = shouldAssignDouble ? Double(20) : Float(20)

稍后当您想知道实际类型是Float还是Double时,您可以使用

进行检查
myVar is Double //returns true
相关问题