这是我正在使用的协议,
public protocol PValidationCondition: Equatable {
associatedtype T
func isValid(value: T) -> Bool
func errorMessage() -> String
}
这是我正在使用的模型:
struct PValidationElementWithConditions<T: PValidationCondition> {
let validationElement: PValidationElement
var conditions: [T] = []
}
但是我想将多个对象存储在数组中,如下所示:
var validationElementsWithConditions: [String: PValidationElementWithConditions] = [:]
但是出现以下错误:
“无法将类型'[String:PValidationElementWithConditions <_>]'的值转换为指定类型'[String: PValidationElementWithConditions]'“
答案 0 :(得分:3)
这是不正确的
[String: PValidationElementWithConditions]
你必须做
[String: PValidationElementWithConditions<Type>]
Type符合PValidationCondition
和Equatable
的地方,从这里的错误很明显,它需要一个参数
PValidationElementWithConditions<_>
//
extension String : PValidationCondition {
public func isValid(value: String) -> Bool {
return true
}
public func errorMessage() -> String {
return ""
}
public typealias T = String
}
使用
var validationElementsWithConditions: [String: PValidationElementWithConditions<String>] = [:]
答案 1 :(得分:1)
由于它是通用的,因此需要在声明中指定类型T。例如:
var validationElementsWithConditions: [String: PValidationElementWithConditions<String>] = [:]