我的案子似乎很简单。我试图编写漂亮的可重用代码来生成错误。
代码逻辑似乎很好。我们只在运行时访问初始化的属性。但编译器会抛出常见错误:
实例成员“jsonValue”不能用于类型“T”
这是我的密码:

import Foundation

protocol ResponseProtocol {

    static var key: String { get }
    var jsonValue: [String : Any] { get }

}

struct SuccessResponse {

    let key = "success"

    enum EmailStatus: ResponseProtocol {

        case sent(String)

        static let key = "email"

        var jsonValue: [String : Any] {
            switch self {
            case .sent(let email): return [EmailStatus.key : ["sent" : email]]
            }
        }
    }

    func generateResponse<T: ResponseProtocol>(_ response: T) -> [String : Any] {
        return [key : T.jsonValue]
    }

}

我真的很想让这段代码起作用。”因为现在我有了这个的“硬编码”版本。

最佳答案

jsonValue是方法参数'response'的属性,而不是T的类属性

protocol ResponseProtocol {

    static var key: String { get }
    var jsonValue: [String : Any] { get }

}

struct SuccessResponse {

    let key = "success"

    enum EmailStatus: ResponseProtocol {

        case sent(String)

        static let key = "email"

        var jsonValue: [String : Any] {
            switch self {
            case .sent(let email): return [EmailStatus.key : ["sent" : email]]
            }
        }
    }

    func generateResponse<T: ResponseProtocol>(_ response: T) -> [String : Any] {
        return [key : response.jsonValue]
    }

}

关于ios - Swift泛型函数接受枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48517886/

10-13 05:38