如何为 SwiftData 中的 `Predicate<each Input>` 类型编写带有 `where` 子句的扩展方法?

问题描述 投票:0回答:1

在 SwiftData 中,

Predicate
类型使用参数包:

struct Predicate<each Input>

现在,我想在

Predicate
上添加一个扩展方法,该方法仅在泛型参数为
SomeType
类型时才可用:

@Model
class SomeType {
    var someVar: Int
}

我一直在尝试让它工作,但它给出了各种错误:

extension Predicate where Input == SomeType { }

打包引用“输入”需要使用关键字“重复”进行扩展

类型包“输入”必须用“每个”引用

extension Predicate where each Input == SomeType { }

打包引用“输入”需要使用关键字“重复”进行扩展

extension Predicate where repeat each Input == (SomeType) { }

尚不支持相同元素要求

如何将此函数添加为

Predicate<each Input>
上的静态函数,其中
Input == SomeType

static func predicateMatchingNegativeSomeVars() -> Predicate<SomeType> {
    #Predicate<SomeType> {
        $0.someVar < 0
    }
}
swift swift-data
1个回答
0
投票

因为SE-361,你可以这么做

extension Predicate<SomeType> {
    static func predicateMatchingNegativeSomeVars() -> Predicate<SomeType> {
        #Predicate<SomeType> {
            $0.someVar < 0
        }
    }
}

也就是说,由于您要添加的方法是

static
,因此您不需要此绑定 - 只需编写
extension Predicate { ... }
即可。仅当您添加实例成员时才需要此信息。

© www.soinside.com 2019 - 2024. All rights reserved.