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

属性中函数类型的Sendability与协议要求不匹配问题

解决ProcessProtocol中terminationHandler的警告问题

你遇到的警告根源是协议里terminationHandler的参数类型定义错误:你写死成了Process,但原生Process的terminationHandler参数类型是Self(即当前实例的类型),这就导致协议要求的类型和原生属性的实际类型不匹配,即便加了@Sendable也会触发警告。

修正后的代码如下:

protocol ProcessProtocol {
    var executableURL: URL? { get set }
    var arguments: [String]? { get set }
    var environment: [String : String]? { get set }
    var currentDirectoryURL: URL? { get set }
    var standardInput: Any? { get set }
    var standardOutput: Any? { get set }
    var standardError: Any? { get set }
    func run() throws
    func interrupt()
    func terminate()
    func suspend() -> Bool
    func resume() -> Bool
    var processIdentifier: Int32 { get }
    var isRunning: Bool { get }
    var terminationStatus: Int32 { get }
    var terminationReason: Process.TerminationReason { get }
    // 将参数类型从 Process 改为 Self,和原生实现对齐
    var terminationHandler: (@Sendable (Self) -> Void)? { get set }
    var qualityOfService: QualityOfService { get set }
}

extension Process: ProcessProtocol {}

修改后,协议的terminationHandler类型和Process原生属性的类型完全匹配,警告会自动消失。因为Process的terminationHandler本质是接收自身实例作为参数,用Self指代符合协议的类型,才能和原生实现的类型要求对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:28