Swift初始化协议中的常量

时间:2014-11-07 09:09:39

标签: swift interface initialization

在Java中,您可以在接口中初始化最终的静态字符串。 Swift中还有一个方法吗?

2 个答案:

答案 0 :(得分:9)

实际上,您可以使用协议扩展在Swift中执行此操作:

创建协议并使用getter定义所需的变量:

protocol Order {
    var MAX_ORDER_ITEMS: Int { get }
    func getItem(item: Int) -> OrderItem
    // etc
}

定义协议扩展名:

extension Order {
    var MAX_ORDER_ITEMS: Int { return 1000 }
}

这样做的一个优点是您不必像Swift和静态一样使用协议名称前缀。

唯一的问题是你只能从实现协议的类中访问变量(这可能是最常见的情况)。

答案 1 :(得分:5)

更新此答案不再准确。请改为 rghome 的答案


没有swift不支持。我的建议是在您的协议旁边定义一个结构,并将所有常量定义为不可变的静态存储属性。例如:

protocol MyProtocol {
}

struct MyProtocolConstants {
    static let myConstant = 10
}

请注意,结构首选于类,至少有一个原因:类不支持静态存储属性(还)