属性中函数类型的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
相关产品推荐
相关产品推荐

