【问题标题】:Convert Swift to Objective-C [duplicate]将 Swift 转换为 Objective-C [重复]
【发布时间】:2015-04-06 14:14:14
【问题描述】:

我想知道如何将下面的 Swift 枚举转换为 Objective-C:

enum MeatTemperature: Int {
    case Rare = 0, MediumRare, Medium, WellDone

    var stringValue: String {
        let temperatures = ["Rare", "Medium Rare", "Medium", "Well Done"]
        return temperatures[self.rawValue]
    }

    var timeModifier: Double {
        let modifier = [0.5, 0.75, 1.0, 1.5]
        return modifier[self.rawValue]
    }
}

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    只需在枚举前加上 @objc 前缀

    @objc enum MeatTemperature: Int {
        case Rare = 0, MediumRare, Medium, WellDone
    
        var stringValue: String {
            let temperatures = ["Rare", "Medium Rare", "Medium", "Well Done"]
            return temperatures[self.rawValue]
        }
    
        var timeModifier: Double {
            let modifier = [0.5, 0.75, 1.0, 1.5]
            return modifier[self.rawValue]
        }
    }
    

    检查这个 - https://developer.apple.com/swift/blog/?id=22

    【讨论】:

    • 感谢您的帮助! ^^
    【解决方案2】:

    您是在问如何将 Swift 枚举公开给 ObjC,或者如何编写与您的 Swift 代码等效的 ObjC 代码? @UttamSinha 的答案处理第一个,所以这是第二个。

    ObjC 不像 Swift 那样对枚举执行方法。传统上,此类情况使用全局函数——由于它们是全局函数,因此您应该合理地命名它们以避免冲突。

    typedef NS_ENUM(NSInteger, TTMMeatTemperature) {
        TTMMeatTemperatureRare = 0,
        TTMMeatTemperatureMediumRare,
        TTMMeatTemperatureMedium,
        TTMMeatTemperatureMediumWell, // you forgot the way I like my steaks! :)
        TTMMeatTemperatureWellDone,
    }
    
    NSString * TTMMeatTemperatureToString(TTMMeatTemperature temp) {
        NSArray *names = @["Rare", @"Medium Rare", @"Medium", @"Medium Well", @"Well Done"];
        return names[temp];
    }
    
    NSString * TTMMeatTemperatureTimeModifier(TTMMeatTemperature temp) {
        double modifiers[] = [0.5, 0.75, 1.0, 1.25, 1.5];
        return modifiers[temp];
    }
    

    此外,如果您使用 @objc 将 Swift 枚举公开给 ObjC,则只会获取类型名称及其常量,而不是关联的函数——您需要另一种方法来从 ObjC 访问它们,比如制作一个@objc 具有调用它们的方法的类。

    【讨论】:

    • 非常感谢!!这就是我要找的^^
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多