就像我的问题标题一样。
如果我得到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
}
答案 0 :(得分:5)
使用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
}
答案 1 :(得分:3)
首先,对于A
和无效字符,这两个函数都返回0,这肯定不是故意的。
此解决方案考虑范围A-Z中的所有大写字母,并在失败时返回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
}
}
答案 2 :(得分:0)
我是一名高中生,也是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代码将是最正确的方法,并且也将更容易识别小写和大写< / p>