我有一个班级Constraint
public class Constraint <V: Hashable, D>
我有一个结构CSP
public struct CSP <V: Hashable, D>
它有一组约束
var constraints = Dictionary<V, [Constraint<V, D>]>()
使用方法addConstraint
public mutating func addConstraint(constraint: Constraint<V, D>)
我有一个String和Int的CSP。我想添加String和Int类型的约束。它是Constraint的子类型(也是子类型的子类型):
class SendMoreMoneyConstraint<V, D>: ListConstraint <String, Int>
这不起作用。
csp = CSP<String, Int>(variables: variables, domains: domains)
let smmc = SendMoreMoneyConstraint<String, Int>(variables: variables)
csp.addConstraint(smmc)
最后一行导致类型为Cannot invoke 'addConstraint' with an argument list of type '(SendMoreMoneyConstraint<String, Int>)'
完整来源: https://github.com/davecom/SwiftCSP/blob/master/SwiftCSP/SwiftCSPTests/SendMoreMoneyTests.swift
感谢您指出正确的方向。这是在Xcode 6.4(Swift 1.2)下,但我已经尝试了Xcode 7b4(Swift 2.0)中的代码并看到了相同的错误。
答案 0 :(得分:1)
错误不是既不是答案也不是错误,但是在复制代码之后它很清楚:
您可以这样调用方法:
let smmc = SendMoreMoneyConstraint<String, Int>(variables: variables)
csp.addConstraint(smmc)
但csp
被声明为CSP<String, Int>?
,因此您只需添加?
即可使其正常工作:
csp?.addConstraint(smmc)
不幸的是,编译器没有提供有用的错误消息。