Swift Dictionary自定义类型的初始化给出:'>'不是后缀一元运算符错误

时间:2017-04-07 07:37:57

标签: swift

我正在尝试使用Swift中的自定义类型初始化一个空字典,但我得到'>' 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]()
   }
}

我已在单独的文件中定义了Vertex

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)"
    }
}

我正在寻找Why正在发生的事情。我知道使用var msSet = Dictionary<Vertex<Int>, Double>()会有效。

3 个答案:

答案 0 :(得分:1)

虽然我无法告诉你为什么swift编译器会发出这个错误,你可以让它像这样编译:

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

或者像这样:

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

答案 1 :(得分: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))

答案 2 :(得分:1)

有多种方法可以解决这个问题:

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

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

甚至更详细

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

我查看了快速语法,无法找到答案,说明为什么特定语法无效。它很可能是一个错误。