"使用未解析的标识符"错误,但我在框架

时间:2016-06-09 21:07:43

标签: objective-c swift

此方法出现错误:

func stringFromProduct(product: SPTProduct) -> String {
    switch product {
    case SPTProductFree:
        return "Free"
    case SPTProductPremium:
        return "Premium"
    case SPTProductUnlimited:
        return "Unlimited"
    default:
        return "Unknown"
    }
}

它们出现在SPTProductFree,SPTProductPremium和SPTProductUnlimited。

然而,在我正在使用的框架的头文件中,这被声明:

typedef NS_ENUM(NSUInteger, SPTProduct) {
    SPTProductFree,
    SPTProductUnlimited,
    SPTProductPremium,
    SPTProductUnknown
};

我的桥接文件设置正确,但它仍然说它是一个未解析的标识符。

谢谢!

1 个答案:

答案 0 :(得分:2)

来自"中的Interacting with C APIs;使用Swift with Cocoa和Objective-C"参考:

  

Swift将标有NS_ENUM宏的任何C枚举导入为具有Int原始值类型的Swift枚举。 C枚举案例名称的前缀在导入Swift时会被删除,无论它们是在系统框架中定义还是在自定义代码中定义。

所以你的Objective-C枚举被导入到Swift中

public enum SPTProduct : UInt {
    case Free
    case Unlimited
    case Premium
    case Unknown
}

您可以通过使用"生成的界面"菜单项 在包含定义的Objective-C头文件上。

因此,您可以使用Swift作为

func stringFromProduct(product: SPTProduct) -> String {
    switch product {
    case .Free:
        return "Free"
    case .Premium:
        return "Premium"
    case .Unlimited:
        return "Unlimited"
    default:
        return "Unknown"
    }
}