用于共享功能的Swift协议

时间:2016-06-10 12:37:29

标签: swift protocols

我有很多物品,每个物品需要锁定才能购买。

其中每个对象(NSManaged)都有productName StringisPurchased Bool

我写了一个函数isLocked(),它在单例中使用了属性以及外部检查。

如何将它组合成一个协议,以便协议包含isLocked函数实现,对象可以只遵守协议,然后在需要时调用isLocked?

1 个答案:

答案 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() {

}
}