将数字应用于文本swift2中的每个字母 [英] Apply a number to each letter in text swift2

查看:72
本文介绍了将数字应用于文本swift2中的每个字母的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想比较UITextField中为每个字母赋予数字的两个条目,然后比较两个字段中字母相加的结果.

I want to compare two entries in a UITextField giving a number to each letter and then compare the results of the addition of the letters from both fields.

示例:

a = 1 b = 2 c = 3 d = 4 e = 5 f = 6

a=1 b=2 c=3 d=4 e=5 f=6

textfield1 = cae
textfield2 = fca

textfield1= cae
textfield2= fca

结果是:

textfield1 = 9和
textfield2 = 10

textfield1=9 and
textfield2=10

推荐答案

您可以使用每个字符的unicode标量表示形式(查找ASCII表),并将它们相加后相加-96(例如,a -> 1等).在下面,大写字母将生成与小写字母相同的数字值.

You could use the unicode scalar representation of each character (look up ASCII tables) and sum these shifted by -96 (such that a -> 1, b -> 2 and so on). In the following, upper case letters will generate the same number value as lower case ones.

let foo = "cae"

let pattern = UnicodeScalar("a")..."z"
let charsAsNumbers = foo.lowercaseString.unicodeScalars
    .filter { pattern ~= $0 }
let sumOfNumbers = charsAsNumbers
    .reduce(0) { $0 + $1.value - 96 }

print(sumOfNumbers) // 9

或者,为简化用法,创建一个函数或String扩展

Or, to simplify usage, create a function or String extension

/* as a function */
func getNumberSum(foo: String) -> UInt32 {
    let pattern = UnicodeScalar("a")..."z"
    return foo.lowercaseString.unicodeScalars
        .filter { pattern ~= $0 }
        .reduce(0) { $0 + $1.value - 96 }
}

/* or an extension */
extension String {
    var numberSum: UInt32 {
        let pattern = UnicodeScalar("a")..."z"
        return self.lowercaseString.unicodeScalars
            .filter { pattern ~= $0 }
            .reduce(0) { $0 + $1.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
}

这篇关于将数字应用于文本swift2中的每个字母的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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