2017-05-31 1 views
2

になるはずですが、私は奇妙なエラーが発生しています。私は、ネストされたタイプGravl.Nodeを持っているので、のようなタプルの配列インスタンス化しようとしています:Swiftはネストされた型を含むタプルの配列を作成できません

var attributes = [(attribute: String?, value: Gravl.Node)]() 

を...しかしスウィフトが不平を言っている:

は、非機能タイプ「の値を呼び出すことはできません[(属性:文字列?タイプ、値:Gravl.Node.Type)] '

どのような考えがありますか?ネストされた型を何か他のものに置き換えると、うまく動作します。

これはパーサ/コンパイラのバグですか?

+1

これはバグです(例: https://stackoverflow.com/questions/32833078/swift-cannot-create-empty-array-of-nested-enum-type –

+1

回避策: 'typealias Gravl_Node = Gravl.Node'、' var属性= [(属性:文字列?,値:Gravl_Node)]() ' – vacawama

+0

@vacawamaああ、タイプアリアスを試してみると思っていませんでした。 – devios1

答えて

2

はい、これはthis questionのようなバグです。することができます。この場合、

var attributes: [(attribute: String?, value: Gravl.Node)] = [] 

または

var attributes = Array<(attribute: String?, value: Gravl.Node)>() 

:そのQ & Aの例に続いて、あなたは配列を作成方法の構文を変更することができます

typealiasを作成することで問題を回避することもできます。

例:

class Gravl { 
    enum Node { 
     case first, last 
    } 
} 

typealias Gravl_Node = Gravl.Node // work around Swift bug 
var attributes = [(attribute: String?, value: Gravl_Node)]() 

attributes.append((attribute: "hello", value: Gravl.Node.first)) 
関連する問題