gpt4 book ai didi

swift - 如何在@propertyWrapper 中获得 parent 的 self ?

转载 作者:行者123 更新时间:2023-11-28 07:20:40 25 4
gpt4 key购买 nike

我只想在事件之间经过指定的时间间隔后才处理更改的@Published someVar。如何在 propertyWrapper 中获取 SomeClassself

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com