2017-05-24 13 views
1

だから、私は(「または」)演算子を作りたい私はこのような変数を宣言することができますどの:Swiftデータ型中置演算子を作成できますか?

var someNum: Int or Double

この例をもたらします。実際にカスタムデータ型で使用したいと思っています。しかし、変数宣言のための演算子を作ることは可能ですか?その変数は、割り当てられているものに応じて2つの型のうちの1つになります。私はどのデータ型が入力可能か知っていますが、残念ながら、私は現在、フェイルセーフコードを実装した「Any」の型を割り当てています。または元のデータ型を変更しました。だから私はこれが可能か、存在するかどうか疑問に思っていただけです。

私はこの記事を参考にしましたが、私が読んだことから、私ができるかどうか、どうやって自分のニーズに合わせて実装するのか分かりません。 Custom Operators in Swift

ありがとうございました。

答えて

4

あなたが求めている方法でこれを行うことはできません。そのような宣言で演算子を使用するのは構文上不可能です。

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

とあなたの変数の型とすることを取る:

var value: NumericInput 

次にあなたが

value = .integral(someInteger) 
0
を言うあなたは何ができるか

は種類を区別するために列挙型を使用しています

タイプAnyの値を宣言することができます。例えば

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

後で、実際の型はFloatDoubleであるかどうかを知りたいとき、あなたはあなたがジェネリックでこれを行うことができ

myVar is Double //returns true 
+1

。 DoubleまたはFloatの例ではなく、このメソッドを列挙型で使用できますか? –

+0

ええ、ちょっとテストしました。 'struct'型でもうまく動作します。 –

1

でそれを確認することができます。

struct MyStruct<T> 
{ 
    var someNum: T 
} 

データタイプを明示的に指定することができます作成時にタイプを指定して使用するish:let a = MyStruct<Int>(someNum: 4)。あなたもちょうどこの操作を行うことができますので

一つスウィフトは、それが、これはすべて絶対に美しいコンストラクタからのデータ型を派生されますが行われます。

実際には非常に便利です
let intStruct = MyStruct(someNum: 4) 
let floatStruct = MyStruct(someNum: 5.0) 
関連する問題