在Swift中将NSNumber转换为罗马数字字符串[关闭]

问题描述 投票:0回答:1

我希望在swift中使用NSNumber并将其转换为罗马数字字符串。有任何想法吗?

swift nsnumber swift-extensions
1个回答
2
投票

最好的办法是编写NSNumber的扩展名(类似于Objective-C类)。以下代码采用NSNumber并将其转换为罗马数字字符串。您可以将此扩展程序放在项目中的任何位置,但我建议使用Utilities文件或类似的东西。

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

extension NSNumber {
    func romanNumeral() -> String {
        var integerValue = self.integerValue
        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.appendContentsOf(i.1)
            }
        }
        return numeralString
    }
}

感谢Kenneth Bruno关于改进代码的一些建议。

© www.soinside.com 2019 - 2024. All rights reserved.