Swift/Combine- 将过滤后的对象分配给 class 上的 属性
Swift/Combine- Assign a filtered object to a property on a class
我有一个对象列表。
let arr = [[1, 2, 3, 4, 5]]
它存在于存储库中。
class ArrayRepository: ObservableObject {
@Published let arr = [1,2,3,4,5]
}
我有一个 class 和一个需要在初始化时分配的 属性。
class MyClass: ObservableObject {
var id: String = ""
var myProperty: Int?
}
我的 class 是通过异步过程创建的,该过程本身就是一个存储库。
class myClassRepository {
func buildClass -> MyClass {
myClassInstance = MyClass()
self.arrayRepository.$arr.map { arr in
arr.filter{ [=16=] == someOther.Value }
}.assign(to: \.myProperty, on: myClassInstance).store(in: &subscriptions)
return myClassInstance
}
}
问题是我的模式 returns 一个元素数组,我无法使其符合 class 上的单数 属性?最好的解决方法是什么?
我得到的错误本质上是
Declared closure result '[Int]' is incompatible with contextual type 'Int??'
由于 Swift 的类型系统的限制,您目前不能 assign
到具有非 Optional
值的 Optional
属性 .但是,您可以创建自己的 assign
版本:
func assign<Root: AnyObject>(to path: ReferenceWritableKeyPath<Root, Output?>, on root: Root) -> AnyCancellable {
sink { [weak root] in root?[keyPath: path] = [=10=] }
}
此实现还有防止引用循环的好处。
我有一个对象列表。
let arr = [[1, 2, 3, 4, 5]]
它存在于存储库中。
class ArrayRepository: ObservableObject {
@Published let arr = [1,2,3,4,5]
}
我有一个 class 和一个需要在初始化时分配的 属性。
class MyClass: ObservableObject {
var id: String = ""
var myProperty: Int?
}
我的 class 是通过异步过程创建的,该过程本身就是一个存储库。
class myClassRepository {
func buildClass -> MyClass {
myClassInstance = MyClass()
self.arrayRepository.$arr.map { arr in
arr.filter{ [=16=] == someOther.Value }
}.assign(to: \.myProperty, on: myClassInstance).store(in: &subscriptions)
return myClassInstance
}
}
问题是我的模式 returns 一个元素数组,我无法使其符合 class 上的单数 属性?最好的解决方法是什么?
我得到的错误本质上是
Declared closure result '[Int]' is incompatible with contextual type 'Int??'
由于 Swift 的类型系统的限制,您目前不能 assign
到具有非 Optional
值的 Optional
属性 .但是,您可以创建自己的 assign
版本:
func assign<Root: AnyObject>(to path: ReferenceWritableKeyPath<Root, Output?>, on root: Root) -> AnyCancellable {
sink { [weak root] in root?[keyPath: path] = [=10=] }
}
此实现还有防止引用循环的好处。