如何递减包含数字的字符? [英] How to decrement a Character that contains a digit?
问题描述
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.
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屋!