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

Swift添加协议存根后仍重复提示‘类型未遵循协议’错误

Swift泛型协议遵循问题的解决方法

问题根源

  1. 泛型参数与协议名重名:你使用LocaleStrategy、TimeWindowStrategy作为泛型参数名,这和你定义的协议名称完全一致,导致编译器无法区分泛型参数和协议类型,进而无法正确校验协议遵循性。
  2. 泛型约束不匹配:ProjectProtocol要求localeStrategy必须遵循LocaleStrategy协议、timeWindowStrategy必须遵循TimeWindowStrategy协议,但你的泛型仅约束到Codable,没有明确绑定到对应的策略协议。

修正后的代码

// MARK - Locale
protocol LocaleStrategy: Codable {
    var locale: String? { get set }
}

struct LocaleStrategyNone: LocaleStrategy {
    var locale: String? = nil
}

struct LocaleStrategyCountry: LocaleStrategy {
    var locale: String?
}

// MARK - TimeWindow
protocol TimeWindowStrategy: Codable {
    var timeWindowInSeconds: Int? { get set }
}

struct TimeWindowStrategyNone: TimeWindowStrategy {
    var timeWindowInSeconds: Int? = nil
}

struct TimeWindowStrategyInSeconds: TimeWindowStrategy {
    var timeWindowInSeconds: Int?
}

// MARK - Project
protocol ProjectProtocol: Codable {
    var localeStrategy: LocaleStrategy { get set }
    var timeWindowStrategy: TimeWindowStrategy { get set }
}

// 修改泛型参数名并修正约束为对应策略协议
struct Project<L: LocaleStrategy, T: TimeWindowStrategy>: ProjectProtocol {
    var localeStrategy: L
    var timeWindowStrategy: T
}

let localeStrategyCountry = LocaleStrategyCountry(locale: "USA")
let timeStrategyNone = TimeWindowStrategyNone()
let project = Project(localeStrategy: localeStrategyCountry, timeWindowStrategy: timeStrategyNone)

let localeStrategyNone = LocaleStrategyNone()
let timeWindowStrategyInSeconds = TimeWindowStrategyInSeconds(timeWindowInSeconds: 3)
let project2 = Project(localeStrategy: localeStrategyNone, timeWindowStrategy: timeWindowStrategyInSeconds)

let projects: [ProjectProtocol] = [project, project2]

关键修正点

  • 将泛型参数名改为L、T(也可使用更具语义的名称,如LocaleImpl、TimeWindowImpl),彻底避免与协议名冲突。
  • 泛型约束从Codable调整为对应的LocaleStrategy和TimeWindowStrategy协议,让编译器明确泛型类型符合ProjectProtocol的成员类型要求。
  • 之前点击「添加协议存根」无效是因为编译器被重名的泛型参数干扰,无法正确识别协议所需的成员类型,导致生成的存根不符合要求,重复点击自然会出现重定义错误。

内容的提问来源于stack exchange,提问作者h.and.h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:15:37