swift - 在 Swift 中将整数转换为罗马数字字符串

标签 swift nsnumber swift-extensions

我希望在 Swift 中获取一个 Integer 并将其转换为罗马数字 String。有什么想法吗?

最佳答案

可以在 Int 上写一个扩展,类似于下面看到的。

请注意:对于小于一的数字,此代码将返回 ""。虽然就罗马数字而言这可能没问题(零不存在),但您可能希望在自己的实现中以不同方式处理此问题。

extension Int {
    var romanNumeral: String {
        var integerValue = self
        var numeralString = ""
        let mappingList: [(Int, String)] = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]
        for i in mappingList {
            while (integerValue >= i.0) {
                integerValue -= i.0
                numeralString += i.1
            }
        }
        return numeralString
    }
}

也感谢 Kenneth Bruno 提出的一些改进代码的建议。

关于swift - 在 Swift 中将整数转换为罗马数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068104/

相关文章:

ios - 从 map View 缩小 UI 测试不起作用

ios - UIPanGestureRecognizer 弹出 UIViewController

iphone - 如何判断 Core Data 的 NSNumber 属性的类型

iphone - NSNumber、设置和检索

ios - 创建一个swift扩展函数供所有controller访问

swift - 使用 EXC_BAD_INSTRUCTION 在空扩展中断中声明符合 @objc 协议(protocol)

ios - 使用 Avplayer/kit 问题播放本地视频

ios - UILabel 子类在使用约束时不显示

ios - 设置 NSNumber 属性时与 exc_bad_access 相关的核心数据有什么解决方案吗?

swift - 如何对锁定在 Pod 内的扩展进行子类化?