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

如何在Objective-C中访问Swift String枚举?解决属性未找到报错

问题分析

你遇到的问题根源有两个:

  1. 嵌套在Device类中的Auth枚举未添加@objc修饰,导致它无法被Objective-C识别,进而OC代码无法识别类型为该枚举的auth实例属性。而brand是String类型,属于Swift和OC自动桥接的类型,所以可以正常访问。
  2. 你代码中错误地以类属性的方式访问Device.auth,但auth是实例属性,必须通过具体的Device实例来访问。
解决方法

由于你无法修改自动生成的Swift模型,只能在Objective-C代码中通过KVC(键值编码)来获取auth属性的原始值:

// 假设你已有一个Device实例对象
Device *targetDevice = ...;
NSString *authRawValue = [targetDevice valueForKey:@"auth"];
self.isAuthEnabled = [authRawValue isEqualToString:@"ENABLED"];

如果后续可以调整Swift模型的生成规则,建议给Auth枚举添加@objc修饰,这样就能在OC中直接类型安全地访问:

// 修改后的Swift枚举
@objc public enum Auth: String, Codable {
    case enabled = "ENABLED"
    case supported = "SUPPORTED"
    case notSupported = "NOT_SUPPORTED"
    case bypassed = "BYPASSED"
}

此时OC代码可以这样写:

Device *targetDevice = ...;
// 方式1:直接比较枚举值(类型安全)
self.isAuthEnabled = (targetDevice.auth == DeviceAuthEnabled);
// 方式2:比较原始字符串
self.isAuthEnabled = [targetDevice.auth.rawValue isEqualToString:@"ENABLED"];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:41:05