为什么我不能在没有方法调用的情况下用泛型指定的类型替换泛型?

时间:2015-07-24 20:49:24

标签: ios macos swift

我有一个班级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)中的代码并看到了相同的错误。

1 个答案:

答案 0 :(得分:1)

错误不是既不是答案也不是错误,但是在复制代码之后它很清楚:

您可以这样调用方法:

let smmc = SendMoreMoneyConstraint<String, Int>(variables: variables)
csp.addConstraint(smmc)

csp被声明为CSP<String, Int>?,因此您只需添加?即可使其正常工作:

csp?.addConstraint(smmc)

不幸的是,编译器没有提供有用的错误消息。

相关问题