繁体   English   中英

Swift4将特定的字符串转换为特定的Int

[英]Swift4 convert specific string to specific Int

就像我的问题标题一样。
如果我得到A,我想返回0。
如果我得到B,我想返回1。
....
如果我得到Z,我想返回25。
如何使此功能看起来更好和更容易? 谢谢。

func convertStringToInt(text: String) -> Int {

 switch text {
    case "A":
        return 0
    case "B":
        return 1

    //...C TO Y

    case "Z":
        return 25
    default:
        break
    }
    return 0

}

使用ASCII值,您可以将其缩短为此(也适用于小写字母):

func convertStringToInt(characterText: String) -> Int? {
    guard let aValue = "A".unicodeScalars.first?.value,
        let zValue = "Z".unicodeScalars.first?.value,
        let characterValue = characterText.uppercased().unicodeScalars.first?.value,
        // next line tests if the input value is between A and Z
        characterValue >= aValue && characterValue <= zValue else {
            return nil // error

    }
    return Int(characterValue) - Int(aValue)
}

print("Value for A: \(convertStringToInt(characterText: "A"))")
print("Value for G: \(convertStringToInt(characterText: "G"))")
print("Value for Z: \(convertStringToInt(characterText: "Z"))")
print("Value for z: \(convertStringToInt(characterText: "z"))")
print("Value for ^: \(convertStringToInt(characterText: "^"))")

印刷品:

Value for A: Optional(0)
Value for G: Optional(6)
Value for Z: Optional(25)
Value for z: Optional(25)
Value for ^: nil

基于这个问题

或者,如果您想使用数组索引:

func convertStringToInt(characterText: String) -> Int {
    let array = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
    return array.firstIndex(of: characterText.uppercased()) ?? -1 // default value for a text that is not found
}

首先,您的函数对于A无效字符都返回0,这肯定不是故意的。

此解决方案考虑范围AZ中的所有大写字母,并在失败时返回nil

func convertStringToInt(text: String) -> Int? {

    guard let scalar = UnicodeScalar(text), 65..<91 ~= scalar.value else { return nil }
    return Int(scalar.value) - 65
}

要同时考虑小写字符,请使用switch语句

func convertStringToInt(text: String) -> Int? {

    guard let scalar = UnicodeScalar(text) else { return nil }
    let value = Int(scalar.value)
    switch value {
    case 65..<91: return value - 65
    case 97..<123: return value - 97
    default : return nil
    }
}

我是一名高中生,也是Swift的新手,我解决问题的方式并不是最有效的方法,但我希望它能给您带来新的见解

func convertStringToInt(text: String)-> Int {
let stringarray=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
var defaultvalue = -1
var value = -1000000
for i in stringarray{
    defaultvalue+=1
    if text==i{
        value=defaultvalue
    }
    }
return value

}

-1000000只是无效输入的值,由于人们已经这样做了,所以我没有在该代码中使用ASCLL代码,但是使用ASCLL代码将是最正确的方式,并且也更容易识别小写和大写

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM