如何在Objective-C中访问Swift String枚举?解决属性未找到报错
问题分析
你遇到的问题根源有两个:
- 嵌套在
Device类中的Auth枚举未添加@objc修饰,导致它无法被Objective-C识别,进而OC代码无法识别类型为该枚举的auth实例属性。而brand是String类型,属于Swift和OC自动桥接的类型,所以可以正常访问。 - 你代码中错误地以类属性的方式访问
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
相关产品推荐
相关产品推荐

