在SwiftData中,Predicate类型使用参数包:

struct Predicate<each Input>

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

@Model
class SomeType {
    var someVar: Int
}

我一直在try 让它工作,但它出现了各种错误:

extension Predicate where Input == SomeType { }

包引用"输入"需要使用关键字"repeat"进行扩展

类型包"输入"必须用"each"引用

extension Predicate where each Input == SomeType { }

包引用"输入"需要使用关键字"repeat"进行扩展

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

尚未支持相同元素要求

如何将此函数添加为Predicate<each Input>Input == SomeType上的静态函数?

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

推荐答案

SE-0393实际上提到了与您在Future Directions部分中try 的类似的语法.目前尚未实施.

但感谢SE-361,你可以做

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

也就是说,由于您想要添加的方法无论如何都是static,因此您不需要这个边界-只需编写extension Predicate { ... }即可.只有在添加实例成员时才需要此.

Swift相关问答推荐

try 编写复杂的断言时出现编译器错误

Swift中可以取消的延迟任务

如何在一个角色隔离类上编写自定义==实现?

SwiftUI状态更新

Swift concurrency reload/await,支持只执行成功并重试

如何在SWIFT中使用DiscardingTaskGroup获得任务结果

使用`JSONSerialiser`时,省略通用可选项

我如何读取并通知可可 macos 中某个类的计算(computed)属性?

如何在不提交到应用store 的情况下在本地运行我的应用

如何避免从模块导入函数

如何在 SwiftUI 中用图像替换占位符文本?

SwiftUI 中的计时器崩溃屏幕

`IndexSet` 永远不会是空的?

为什么更改属性后动画会加速? SwiftUI

阻止其他类型的键盘

为什么 Swift Tuples 只能在元素个数小于等于 6 的情况下进行比较?

Alamofire 会自动存储 cookie 吗?

Swift 2 中的新 @convention(c):我该如何使用它?

如何使用 swift 在 tableview 中填充两个不同数组的两个部分?

如何快速将弹出框调整为表格视图中内容的大小?