- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只想在事件之间经过指定的时间间隔后才处理更改的@Published someVar
。如何在 propertyWrapper
中获取 SomeClass
的 self
?
private var cancellableSet: Set<AnyCancellable> = []
extension Published where Value: Equatable {
init<S>(
wrappedValue defaultValue: Value,
for dueTime: S.SchedulerTimeType.Stride,
scheduler: S,
sink: @escaping (Value) -> () ) where S: Scheduler {
self.init(initialValue: defaultValue)
projectedValue
.debounce(for: dueTime, scheduler: scheduler)
.removeDuplicates()
.sink(receiveValue: sink)
.store(in: &cancellableSet)
}
}
class SomeClass {
@Published(
for: 0.5,
scheduler: RunLoop.main,
sink: { val in
// how to get self of SomeClass
print(self.someVar2) //Error: Value of type '(SomeClass) -> () -> SomeClass' has no member 'someVar2'
})
var someVar = ""
var someVar2 = ""
}
最佳答案
我在另一个论坛得到了如下答案
Officially? You cannot.
Unofficially? You can use underscored subscript - check out this test in the swift repo 29
Underscored stuff isn't official, there are no guarantees and can be removed at any time.
我在没有使用下划线下标
的情况下添加了我的解决方案
private var cancellableSet: [String: AnyCancellable] = [:]
extension Published where Value: Equatable {
init(wrappedValue defaultValue: Value) {
self.init(initialValue: defaultValue)
}
mutating func Observe<S>(
key: String,
for dueTime: S.SchedulerTimeType.Stride,
scheduler: S,
sink: @escaping (Value) -> () ) where S: Scheduler {
print(key)
if cancellableSet[key] == nil {
cancellableSet[key] =
self.projectedValue
.debounce(for: 0.5, scheduler: RunLoop.main)
.removeDuplicates()
.sink(receiveValue: sink)
}
}
}
class SomeClass {
@Published
var someVar = "" {
willSet {
_someVar.Observe(key: #function, for: 0.5, scheduler: RunLoop.main) { val in
print(val)
}
}
}
var someVar2 = ""
func test() {
someVar = "a"
someVar = "ab"
someVar = "abc"
}
}
SomeClass().test()
关于swift - 如何在@propertyWrapper 中获得 parent 的 self ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58255099/
这是我的属性包装器: @propertyWrapper struct UserDefaultsBacked { let key: String let storage: UserDef
我正在为 UserDefaults 创建一个属性包装器。 我想要实现的是: 为属性设置非零值会将其存储在用户默认值中。 设置 nil 将从 UserDefault 中删除该对象。 但是下面的代码会引发
我想创建一个属性包装器,它将存储一个回调 block ,并在每次值更改时执行它。像简单的KVO之类的东西。它工作得很好,但有一个问题。如果我在此回调 block 中使用属性本身,则会收到错误: Sim
我已经制定了一个关于与此相关的主题的先前问题,但现在更具体地说:我很好奇 @State 变量在闭包内的行为,显然来 self 测试过变量无法更新,翻了几篇文章也没找到答案。具体来说,这就是我一直在处理
@propertyWrapper 和 @propertyDelegate 有什么区别?在所有 WWDC19 视频中,他们都在谈论 @propertyWrapper,但是所有实际实现都使用 @prope
我正在尝试使用 Swift 5.1 属性包装器,但每次我认为我有一个很酷的用例时,我最终都会遇到无法在 View 模型的初始值设定项中使用它们的问题。 以这个极其简单的例子为例。 class NoPr
我只想在事件之间经过指定的时间间隔后才处理更改的@Published someVar。如何在 propertyWrapper 中获取 SomeClass 的 self? private var can
我是一名优秀的程序员,十分优秀!