swiftで複数の型を持つ変数を持つ

私は変数を持ちたいのですが、それは複数の型(私が定義したものだけです)を持つことができます。

var example: String, Int = 0
example = "hi"

この変数はInt型とString型の値だけを保持できるはずです。

これは可能ですか?

ご協力いただきありがとうございます ;)

0
nl ru de

4 答え

「関連する値の列挙」は、あなたが探しているものかもしれません。

enum StringOrInt {
    case string(String)
    case int(Int)
}

文字列または整数を代入することができます。

var value: StringOrInt
value = .string("Hello")
// ...
value = .int(123)

内容の検索はswitchステートメントで行われます。

switch value {
case .string(let s): print("String:", s)
case .int(let n): print("Int:", n)
}
2
追加された

いいえ、これはクラス、構造体などには不可能です。

しかし、それはプロトコルのために可能です。

あなたはこれができます:

protocol Walker {
func go()
}
protocol Sleeper {
func sleep()
}

var ab = Walker & Sleeper

あるいは

    struct Person {
    var name: String
    }


var ab = Person & Walker & Sleeper

しかし、私はこの方法をお勧めしません。

もっと便利これ:

struct Person: Walker, Sleeper {
/// code
}
var ab = Person
1
追加された

あなたは Tuple を使うことができます。

例:

let 例: (String, Int) = ("hi", 0)

そしてインデックスで各データにアクセスします。

let stringFromExampleTuple = example.0//"hi"
let intFromtExampleTuple = example.1//0
0
追加された

これがあなたがそれを達成する方法です。あなたが期待していたとおりに動作します。

protocol StringOrInt { }

extension Int: StringOrInt { }
extension String: StringOrInt { }

var a: StringOrInt = "10"
a = 10 //> 10
a = "q" //> "q"
a = 0.8 //> Error

NB! I would not suggest you to use it in production code. It might be confusing for your teammates.

0
追加された