我有一些类具有相同的行为,它们都具有
属性> savedPath: String
,items: [String]
,currentItem: [String]
功能> archive(with items: [String])
,unarchive()
所以我创建了一个protocol.swift并让这些类符合该协议以实现这些常见行为。但是,就我而言,我想要:
items
是外部只读的,内部是可读写的archive/unarchive
是私人功能我尝试在private(set)
之前使用items
,在private
之前使用archive/unarchive
,但出现了一些错误。
有解决此问题的灵活解决方案吗?
在没有协议之前
class SampleClass {
private(set) var items: [SampleModel] {
set {
archive(with: newValue)
} get {
return unarchive()
}
}
func archive(with addresses: [SampleModel]) { ... }
func unarchive() -> [SampleModel] { ... }
}
尝试使用协议满足后
protocol SampleProtocol {
associatedtype Item: Switchable
var savedPath: String { get }
var items: [Item] { get }
var currentItem: Item? { get }
func archive(with items: [Item])
func unarchive() -> [Item]
}
答案 0 :(得分:2)
您必须从协议中删除任何私有功能(因为它没有意义)。协议(setter,函数等)中没有什么是私有的
protocol SampleProtocol {
associatedtype Item: Switchable
var savedPath: String { get }
var items: [Item] { get }
var currentItem: Item? { get }
}
然后您应该实现这样的类访问控制:
class SampleClass {
private(set) var items: [SampleModel] {
set {
archive(with: newValue)
} get {
return unarchive()
}
}
private func archive(with addresses: [SampleModel]) { /* ... */ }
private func unarchive() -> [SampleModel] { /* ... */ }
}