ビット インデックスの配列を OptionSet に準拠するクラスに変換するヘルパー関数を作成しようとしています。
func getOptionSet<T: OptionSet>(bitIndexes: [Int64]) -> T {
var result: Int64 = 0
for index in bitIndexes {
result |= 1 << index
}
return T(rawValue: result) // error
}
これはコンパイルに失敗します:
Cannot invoke initializer for type 'T' with an argument list of type '(rawValue: Int64)'
RawValue も使用してみました:
func getOptionSet<T: OptionSet>(bitIndexes: [T.RawValue]) {
var result = T.RawValue() // error
これもうまくいきません:
Cannot invoke value of type 'T.RawValue.Type' with argument list '()'
これはできますか?T に制約を追加する必要がありますか?
この関数を書き直して具象型を使用できることはわかっていますが、可能であれば汎用のままにしたいと考えています。