【发布时间】:2015-10-15 15:47:47
【问题描述】:
我有一堂课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>)
我有一个字符串和整数的 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) 中的代码并看到相同的错误。
【问题讨论】:
-
你在使用 Swift 2 吗?
-
不,这是在 Swift 1.2 下。我已经尝试了 2.0 下的代码,但看到了同样的错误。
-
编译器错误很有可能实际上与潜在问题无关。但除此之外,源代码本身并没有任何意义。具有泛型参数的类是具有泛型参数的类的子类?我强烈建议您退后一步,评估您的问题的哪一部分实际上会从泛型中受益。
-
Swift 1.2 不允许泛型类的非泛型子类(Swift 2 允许),因此 SendMoreMoneyConstraint 具有泛型约束的原因。