我正在try 用新的#Predicate宏获得一些结果.当我try 在谓词中使用enum属性时,问题出现了.有没有人知道这是不是可以做到的,或者这是不是一个漏洞?

XCode 15 beta 4

获取1:

let predicate = #Predicate<ModelA> { $0.type == ModelA.ModelAType.a }

Fetch 2:

let predicate = #Predicate<ModelA> { $0.type.rawValue == ModelA.ModelAType.a.rawValue }

模型:

@Model final class ModelA: Codable {
    @Attribute(.unique) var id: Int64 = 0
    enum ModelAType: Int, CaseIterable, Codable { case a = 1, b }
    var type: ModelAType = ModelAType.a
}

错误:

Type 'ModelA.Type' cannot conform to 'StandardPredicateExpression'
Type 'ModelA.Type' cannot conform to 'PredicateExpression'
Cannot infer key path type from context; consider explicitly specifying a root type

推荐答案

在这种情况下,我使用的方法是为原始值定义一个常量,并在谓词中使用该常量

let aValue = ModelA.ModelAType.a.rawValue
let predicate = #Predicate<ModelA> { $0.type.rawValue == aValue }

我不确定为什么需要这个,但希望它是一个测试版,很快就会改变

Swift相关问答推荐

WWDC Swift并发会话中的厨房服务示例令人困惑

是否有一个Kotlin等价的Swift s @ AddendableReport注释'

在Swift中,是否只有iOS版本超过15才能导入Swift包?

如何在DATE()中进行比较

一种函数,用于判断变量的类型是否为在SWIFT中作为参数传递的类型

SwiftData/PersistentModel.swft:540:致命错误:不支持的关系密钥路径ReferenceWritableKeyPath

是否可以使用一个 NSRegularExpression 同时判断字符串格式并提取子字符串?

找出touch 点的屏幕亮度

OSX 中的 Popover 无法确定透明度

UIBezierPath() 和 DragGesture:连接点创建角而不是曲线

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

Swift - 给定一个像 30 的 Int 如何将范围数乘以 7?

Swift 中的Combine和didSet有什么区别?

我如何从 UIAlertController 导航到新屏幕(swiftUI)

更改该函数的参数之一时,如何将这些 SwiftUI 异步任务合并到一个任务中以从函数中获得正确的结果

VStack SwiftUI 中的动态内容高度

NSFontAttributeName 已更改为 String

swift 3 错误:参数标签 '(_:)' 不匹配任何可用的重载

为 UIImagePicker 设置委托返回错误

Swift中方法的弃用和其他属性,如何?