You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift #Predicate Macro使用单组件KeyPath时运行崩溃问题

使用#Predicate宏创建单组件KeyPath谓词时运行崩溃的问题

问题重现

以下代码编译正常,但运行时会崩溃:

final class Foo 
{
    var title: String = ""
    var name: String = ""
}

let p = #Predicate<Foo> { $0.title == "test" }

崩溃错误信息:

Foundation/KeyPath+Inspection.swift:65: Fatal error: Predicate does not support keypaths with multiple components

通过Xcode展开宏可见,代码被转换为单组件KeyPath的合法调用:

Foundation.Predicate<Foo>({
    PredicateExpressions.build_Equal(
        lhs: PredicateExpressions.build_KeyPath(
            root: PredicateExpressions.build_Arg($0),
            keyPath: \.title
        ),
        rhs: PredicateExpressions.build_Arg("test")
    )
})

原因分析

Foundation内部用于检查KeyPath组件数量的逻辑存在缺陷:它依赖offset(of:)方法判断存储属性的KeyPath是否为多组件,但这个判断方式并不可靠,导致单组件KeyPath被误判为多组件,进而触发崩溃。

现状说明

苹果官方已确认该问题并正在推进修复工作。


内容的提问来源于stack exchange,提问作者Bryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:02:41