在 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
}
}
因为SE-361,你可以这么做
extension Predicate<SomeType> {
static func predicateMatchingNegativeSomeVars() -> Predicate<SomeType> {
#Predicate<SomeType> {
$0.someVar < 0
}
}
}
也就是说,由于您要添加的方法是
static
,因此您不需要此绑定 - 只需编写 extension Predicate { ... }
即可。仅当您添加实例成员时才需要此信息。