ios - 在 Swift 中创建数组时的一般问题

标签 ios swift generics protocols

这是我正在使用的协议(protocol),

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] = [:]

但是我收到以下错误:

"Cannot convert value of type '[String : PValidationElementWithConditions<_>]' to specified type '[String : PValidationElementWithConditions]'"

最佳答案

这是错误的

[String: PValidationElementWithConditions]

你必须做

[String: PValidationElementWithConditions<Type>]

其中 Type 符合 PValidationConditionEquatable 从这里的错误可以清楚地看出它需要一个参数

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>] = [:]

关于ios - 在 Swift 中创建数组时的一般问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787767/

相关文章:

ios - 如何使用 OpenGL ES 在 iOS SDK 中绘制黑边?

swift - 将 Any 转换为 Optional

ios - 在 swift 4 中更改自定义绘图的颜色

ios - 使用 UITableViewAutomaticDimension 时 UIImageView 拉伸(stretch)不正确

iphone - iOS - 如何在两个 View 之间创建自定义过渡?

ios - Phonegap GPS 询问两次

ios - JSON AnyObject 到 Bool 的转换总是返回 nil

java - 为什么 JList 参数化没有破坏 Java 中的兼容性?

java - 带有泛型和可变参数的模棱两可的重载 java 方法

ios - 应用程序终止时执行后台任务