将数字应用于文本 swift2 中的每个字母
Apply a number to each letter in text swift2
我想比较 UITextField
中的两个条目,为每个字母指定一个数字,然后比较两个字段中字母相加的结果。
示例:
a=1 b=2 c=3 d=4 e=5 f=6
textfield1= cae
textfield2= fca
Result is:
textfield1=9 and
textfield2=10
您可以使用每个字符的 unicode 标量表示(查找 ASCII 表)并将这些移位 -96
相加(例如 a -> 1
、b -> 2
等等)。下面,大写字母将生成与小写字母相同的数字值。
let foo = "cae"
let pattern = UnicodeScalar("a")..."z"
let charsAsNumbers = foo.lowercaseString.unicodeScalars
.filter { pattern ~= [=10=] }
let sumOfNumbers = charsAsNumbers
.reduce(0) { [=10=] + .value - 96 }
print(sumOfNumbers) // 9
或者,为了简化使用,创建函数或String
扩展
/* as a function */
func getNumberSum(foo: String) -> UInt32 {
let pattern = UnicodeScalar("a")..."z"
return foo.lowercaseString.unicodeScalars
.filter { pattern ~= [=11=] }
.reduce(0) { [=11=] + .value - 96 }
}
/* or an extension */
extension String {
var numberSum: UInt32 {
let pattern = UnicodeScalar("a")..."z"
return self.lowercaseString.unicodeScalars
.filter { pattern ~= [=11=] }
.reduce(0) { [=11=] + .value - 96 }
}
}
您案例的用法示例:
/* example test case (using extension) */
let textField1 = UITextField()
let textField2 = UITextField()
textField1.text = "cAe"
textField2.text = "FCa"
/* example usage */
if let textFieldText1 = textField1.text,
let textFieldText2 = textField2.text {
print(textFieldText1.numberSum) // 9
print(textFieldText2.numberSum) // 10
print(textFieldText1.numberSum
== textFieldText2.numberSum) // false
}
我想比较 UITextField
中的两个条目,为每个字母指定一个数字,然后比较两个字段中字母相加的结果。
示例:
a=1 b=2 c=3 d=4 e=5 f=6
textfield1= cae
textfield2= fcaResult is:
textfield1=9 and
textfield2=10
您可以使用每个字符的 unicode 标量表示(查找 ASCII 表)并将这些移位 -96
相加(例如 a -> 1
、b -> 2
等等)。下面,大写字母将生成与小写字母相同的数字值。
let foo = "cae"
let pattern = UnicodeScalar("a")..."z"
let charsAsNumbers = foo.lowercaseString.unicodeScalars
.filter { pattern ~= [=10=] }
let sumOfNumbers = charsAsNumbers
.reduce(0) { [=10=] + .value - 96 }
print(sumOfNumbers) // 9
或者,为了简化使用,创建函数或String
扩展
/* as a function */
func getNumberSum(foo: String) -> UInt32 {
let pattern = UnicodeScalar("a")..."z"
return foo.lowercaseString.unicodeScalars
.filter { pattern ~= [=11=] }
.reduce(0) { [=11=] + .value - 96 }
}
/* or an extension */
extension String {
var numberSum: UInt32 {
let pattern = UnicodeScalar("a")..."z"
return self.lowercaseString.unicodeScalars
.filter { pattern ~= [=11=] }
.reduce(0) { [=11=] + .value - 96 }
}
}
您案例的用法示例:
/* example test case (using extension) */
let textField1 = UITextField()
let textField2 = UITextField()
textField1.text = "cAe"
textField2.text = "FCa"
/* example usage */
if let textFieldText1 = textField1.text,
let textFieldText2 = textField2.text {
print(textFieldText1.numberSum) // 9
print(textFieldText2.numberSum) // 10
print(textFieldText1.numberSum
== textFieldText2.numberSum) // false
}