我有一个返回只读数据的服务。在服务中,我正在修改和保存数据,并且我有要隐藏在服务之外的属性。我只想在我的服务接口中公开协议,这样其他开发人员就不会错误地创建或修改这些对象。
这就是的样子
class MyService {
func getData() -> [Protocol1]
}
protocol Protocol1 {
var protocol2: Protocol2 { get }
}
protocol Protocol2 { }
struct Struct1: Protocol1, Codable {
var id: String
var lastModified: Date
var protocol2: Struct2 // Error: Type 'Struct1' does not conform to protocol 'Protocol1'
}
struct Struct2: Protocol2, Codable { }
我运气不好吗?我是否只需要创建一个在服务外部使用的结构和一个用于服务内部的结构?
要使结构Struct1
符合Protocol1
,可以使protocol2
成为计算属性:
struct Struct1: Protocol1, Codable {
var id: String
var lastModified: Date
var protocol2: Protocol2 { get { struct2 } }
private var struct2: Struct2
}