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

Swift调度器任务中的泛型类型问题求助

Swift泛型Output类型判断问题解决方案

核心问题原因

Swift泛型默认是不变的,ValueOutput<Landing>和Output<Any>属于完全不同的类型,无法直接强制转换。要在BaseViewController中脱离具体泛型参数判断类型,得用非泛型协议来抽象Output的共性。

具体实现步骤

  1. 定义非泛型的Output协议
    先定义一个不带泛型的协议,用来标记所有输出类型,并包含成功/错误判断的必要标识:
protocol Output {
    var outputType: OutputType { get }
}

enum OutputType {
    case success
    case failure
}
  1. 让泛型ValueOutput遵循该协议
    让原来的泛型ValueOutput实现这个协议,同时保留自身的泛型业务逻辑:
class ValueOutput<T>: Output {
    let value: T
    let outputType: OutputType

    // 根据业务场景初始化,比如成功场景传入对应值和.success
    init(value: T, outputType: OutputType) {
        self.value = value
        self.outputType = outputType
    }
}
  1. BaseViewController中判断类型并处理
    现在无需知晓具体的泛型参数(比如Landing),只需判断对象是否符合Output协议,再根据协议属性区分逻辑:
// 通知回调示例
if let output = notification.object as? Output {
    switch output.outputType {
    case .success:
        handleSuccess()
    case .failure:
        handleFailure()
    }
}

关于你尝试的Landing : Any

这个写法没有任何作用,Swift中所有类型默认都隐式继承自Any,手动声明不会改变类型特性,解决不了泛型类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Caio Sanchez Christino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:25:30