我正在尝试使用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>()
会有效。
答案 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 ]
我查看了快速语法,无法找到答案,说明为什么特定语法无效。它很可能是一个错误。