我有很多物品,每个物品需要锁定才能购买。
其中每个对象(NSManaged)都有productName String
和isPurchased Bool
。
我写了一个函数isLocked()
,它在单例中使用了属性以及外部检查。
如何将它组合成一个协议,以便协议包含isLocked函数实现,对象可以只遵守协议,然后在需要时调用isLocked?
答案 0 :(得分:2)
如果我没有弄错,可以使用swift中的Default实现来实现。
protocol Locakable {
var productName: String { get }
var isPurchased: Bool { get }
func lock()
func unlock()
}
extension Locakable {
func isLocked() {
if isPurchased {
//do something
//lock it
unlock()
} else {
lock()
}
}
}
有关mixin或默认实现的更多信息,请查看此Wiki页面https://en.wikipedia.org/wiki/Mixin
但是,请注意isLocked()
是静态调度的。评论是否有不清楚的地方。
如果可能,您还可以抽象锁定和解锁的想法,并在协议扩展上编写默认实现。或者提供这样的定制点。
class Item: Locakable {
var productName = "ItemName"
var isPurchased = false
init () {
isLocked()
}
func lock() {
}
func unlock() {
}
}