Swift在协议中初始化常量变量

S. *_*lin 9 initialization interface swift

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

rgh*_*ome 13

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

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

protocol Order {
    var MAX_ORDER_ITEMS: Int { get }
    func getItem(item: Int) -> OrderItem
    // etc
}
Run Code Online (Sandbox Code Playgroud)

定义协议扩展:

extension Order {
    var MAX_ORDER_ITEMS: Int { return 1000 }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Ant*_*nio 5

更新此答案不再准确。请参阅rghome的答案


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

protocol MyProtocol {
}

struct MyProtocolConstants {
    static let myConstant = 10
}
Run Code Online (Sandbox Code Playgroud)

请注意,结构比类优先,因为至少一个原因:类不支持静态存储属性(尚未)