在swift中将用户input转换为Ints数组

我试图做一个简单的iOS游戏来学习快速编程。 用户在文本字段中input4位数字(如果有的话),我的程序应该把这4位数字放在一个数组中。 基本上我想要类似的东西

userInput = "1234" 

成为

 inputArray = [1,2,3,4] 

我知道把string转换成一个字符数组很容易

 var text : String = "BarFoo" var arrayText = Array(text) //returns ["B","a","r","F","o","o"] 

我的问题是我需要我的数组充满整数,而不是字符。 如果我将用户input转换为一个Int,它将成为一个单一的数字,所以如果用户input“1234”,数组将被[1234]填充而不是[1,2,3,4]

所以我试图将用户input视为一个string,将其字符组成一个数组,然后遍历该数组的元素,将它们转换为Ints,并将它们放入第二个数组中,如:

 var input : String = textField.text var inputArray = Array(input) var intsArray = [Int]() for var i = 0; i < inputArray.count ; i++ { intsArray[i] = inputArray[i].toInt() } 

但它不会编译,并给我的错误: 'Character' does not have a member named 'toint'

我究竟做错了什么?

你可以使用:

 let text : String = "123a" let digits = Array(text).map { String($0).toInt()! } // Crash if any character is not int 

但是如果input无效,它将会崩溃。

你可以通过检查toInt()的结果来validation:

 let text : String = "1234" var digits = Array(text).reduce([Int](), combine: { (var digits, optionalDigit) -> [Int] in if let digit = String(optionalDigit).toInt() { digits.append(digit) } return digits }) if countElements(text) == digits.count { // all digits valid } else { // has invalid digits } 

将string转换为[Int]扩展名 – Swift版本

我把下面的扩展名,允许您将String转换为[Int] 。 这是很长的版本,你可以看到你的string在每一行发生了什么。

 extension String { func convertToIntArray() -> [Int]? { var ints = [Int]() for char in self.characters { if let charInt = char.convertToInt() { ints.append(charInt) } else { return nil } } return ints } } extension Character { func convertToInt() -> Int? { return Int(String(self)) ?? nil } } 

这是一个更简单的解决scheme,为未来的用户

 let text : String = "12345" var digits = [Int]() for element in text.characters { digits.append(Int(String(element))!) }