避免重复 属性 方法
Avoiding repetition of property methods
我有这个重复模式和通知令牌的设置器 属性
一旦 属性 设置为 nil,则也从观察中移除
如何使用轻量级解决方案替换和避免 属性 方法的这种代码重复?
var nt1: Any? {
willSet {
if let nt1 = nt1 {
NotificationCenter.default.removeObserver(nt1)
self.nt1 = nil
}
}
}
var nt2: Any? {
willSet {
if let nt = nt2 {
NotificationCenter.default.removeObserver(nt)
self.nt2 = nil
}
}
}
var nt3: Any? {
willSet {
if let nt = nt3 {
NotificationCenter.default.removeObserver(nt)
self.nt3 = nil
}
}
}
您可以创建一个@propertyWrapper。它是在 Swift 5.1
中引入的
@propertyWrapper
struct UnsubscribeOnNil<Value: Any> {
init(wrappedValue: Value?) {
self.value = wrappedValue
}
private var value: Value?
var wrappedValue: Value? {
get { value }
set {
if newValue == nil, let oldValue = value {
NotificationCenter.default.removeObserver(oldValue)
}
value = newValue
}
}
}
并将其用于属性:
@UnsubscribeOnNil var nt1: Any?
@UnsubscribeOnNil var nt2: Any?
@UnsubscribeOnNil var nt3: Any?
我有这个重复模式和通知令牌的设置器 属性
一旦 属性 设置为 nil,则也从观察中移除
如何使用轻量级解决方案替换和避免 属性 方法的这种代码重复?
var nt1: Any? {
willSet {
if let nt1 = nt1 {
NotificationCenter.default.removeObserver(nt1)
self.nt1 = nil
}
}
}
var nt2: Any? {
willSet {
if let nt = nt2 {
NotificationCenter.default.removeObserver(nt)
self.nt2 = nil
}
}
}
var nt3: Any? {
willSet {
if let nt = nt3 {
NotificationCenter.default.removeObserver(nt)
self.nt3 = nil
}
}
}
您可以创建一个@propertyWrapper。它是在 Swift 5.1
中引入的@propertyWrapper
struct UnsubscribeOnNil<Value: Any> {
init(wrappedValue: Value?) {
self.value = wrappedValue
}
private var value: Value?
var wrappedValue: Value? {
get { value }
set {
if newValue == nil, let oldValue = value {
NotificationCenter.default.removeObserver(oldValue)
}
value = newValue
}
}
}
并将其用于属性:
@UnsubscribeOnNil var nt1: Any?
@UnsubscribeOnNil var nt2: Any?
@UnsubscribeOnNil var nt3: Any?