2017-04-07 12 views
1

ではない私は、スウィフトにカスタムタイプと空の辞書を初期化しようとしていますが、私は'>' is not a postfix unary operator errorスウィフト辞書初期化できます:「>」が後置単項演算子エラー

struct Prims { 
    var msSet = [Vertex<Int> : Double]() // This lines gives error 
} 

を取得しています、私は別の方法を試してみました;まだ同じエラーになっ

struct Prims { 
    var msSet: [Vertex<Int> : Double] 

    init() { 
    self.msSet = [Vertex<Int> : Double]() 
    } 
} 

私はそれが起こっているWhyを探しています

import Foundation 

public struct Vertex<T: Hashable> { 
    var data: T 
} 

extension Vertex: Hashable { 
    public var hashValue: Int { 
     return "\(data)".hashValue 
    } 

    static public func ==(lhs: Vertex, rhs: Vertex) -> Bool { 
     return lhs.data == rhs.data 
    } 
} 

extension Vertex: CustomStringConvertible { 
    public var description: String { 
     return "\(data)" 
    } 
} 

私は別のファイルに頂点を定義しています。私はvar msSet = Dictionary<Vertex<Int>, Double>()を使用して動作します知っている。

+2

アレイイニシャライザの構文的な砂糖フォームを取り巻くいくつかのバグがありました。[Swift 3への更新後の奇妙なエスケープ関数の動作](http://stackoverflow.com/q/40599881/2976878)入れ子構造体の配列を作成するときに短いArrayコンストラクタ構文を使用しますか?](http://stackoverflow.com/q/39041712/2976878)私はこれがちょっと変わったと言います。 – Hamish

答えて

1

迅速コンパイラはこのエラーを発し、なぜ私はあなたを伝えることはできませんが、あなたはそれがこのようにコンパイルすることができます:

struct Prims { 
    var msSet = Dictionary<Vertex<Int>, Double>() 
} 

またはこのような:へ

struct Prims { 
    typealias V = Vertex<Int> 
    var msSet = [V : Double]() 
} 
+0

私は 'なぜ'を探していますか? – Rahul

+1

確かに私にはバグのようですね。あなたはそれを報告しようとしましたか? – thm

+0

受け入れとupvoteありがとう。バグを報告したり、重複を見つけたりしたことがありますか?私はswift-DEVELOPMENT-SNAPSHOT-2017-05-12-a.xctoolchainを使用してコードをコンパイルしようとしましたが、エラーはまだあります。 – thm

1
struct Prims { 
    var msSet = [Vertex<Int> : Double]() // This lines gives error 
} 

変更

struct Prims { 
    var msSet = [(Vertex<Int>) : Double]() // This lines gives error 
} 

完全コード

struct Prims { 
    var msSet = [(Vertex<Int>) : Double]() 
} 

public struct Vertex<T: Hashable> { 
    var data: T 
} 

extension Vertex: Hashable { 
    public var hashValue: Int { 
     return data.hashValue 
    } 

    static public func ==(lhs: Vertex, rhs: Vertex) -> Bool { 
     return lhs.data == rhs.data 
    } 
} 

extension Vertex: CustomStringConvertible { 
    public var description: String { 
     return "\(data)" 
    } 
} 

テストコード

var test = Prims() 
test.msSet.updateValue(43, forKey: Vertex(data: 12)) 
1

このついて行くの複数の方法があります。

msSet = Dictionary< Vertex<Int>, Double >() 

または

mSet = [ (Vertex<Int>), Double ]() 

あるいはそれ以上の詳細な

typealias VertexInt=Vertex<Int> 
mSet = [ VertexInt, Double ] 

私は迅速な文法を見て、その特定の構文がなぜ無効であるのかという答えを見つけることができませんでした。バグかもしれません。

+0

ありがとう@Raduしかし、私は 'なぜ? 'を探しています – Rahul

+0

ほとんどの場合、コンパイラのバグです –

関連する問題