如何递减包含数字的字符? [英] How to decrement a Character that contains a digit?

查看:150
本文介绍了如何递减包含数字的字符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

c 是Swift中的字符变量,我刚刚知道包含从1到9的数字。我想递减存储在<$ c中的数字的值$ c> c ,这是最好的我可以想出:

c is a Character variable in Swift that I happen to know contains a digit from 1 to 9. I want to decrement the value of the digit stored in c, and this is the best I could come up with:

c = Character(String(Int(String(c))! - 1))

这看起来很疯狂。是否有更好的方法?

Which seems insanely convoluted. Is there a better way?

推荐答案

这听起来像是 UnicodeScalar

let scalar = UnicodeScalar("8")
let char = Character(UnicodeScalar(scalar.value-1)) // "7"

或更详细地从一个字符变量:

Or, more verbosely from a character variable:

let c = Character("8")
let str = String(c)
if let scalar = str.unicodeScalars.first {
    let char = Character(UnicodeScalar(scalar.value-1)) // "7"
}

这很麻烦,因为我们必须将 Character 转换为 String ,然后是 UnicodeScalar ,然后回到字符。我将继续努力寻求更好的解决方案。

This is pretty messy, as we have to convert the Character into a String, then a UnicodeScalar, and then back to a Character. I'll keep working for towards a better solution.

我想出了为什么UnicodeScalar构造函数使用一个字符串文字。

I've figured out why the UnicodeScalar constructor works with a String literal.

_NSSimpleObjCType (符合 UnicodeScalar )有一个私有初始化器,字符串,并将其传递给 rawValue 构造函数。

There is a private initializer for _NSSimpleObjCType (which conforms to UnicodeScalar) which takes a the first character of a String and passes it to the rawValue constructor.

NSObjCRuntime.swift

extension _NSSimpleObjCType {
    init?(_ v: UInt8) {
        self.init(rawValue: UnicodeScalar(v))
    }

    init?(_ v: String?) {
        if let rawValue = v?.unicodeScalars.first {
            self.init(rawValue: rawValue)
        } else {
            return nil
        }
    }
}

这篇关于如何递减包含数字的字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆