Я пытаюсь сделать простую игру для iOS, чтобы быстро научиться программировать. Пользователь вводит 4-значное число в текстовое поле (цифровая клавиатура с клавиатурой, если это имеет значение), и моя программа должна взять это 4-значное число и поместить каждую цифру в массив. в основном я хочу что-то вроде
userInput = "1234"
Становиться
inputArray = [1,2,3,4]
Я знаю, что преобразовать строку в массив символов очень просто в быстром
var text : String = "BarFoo"
var arrayText = Array(text)
//returns ["B","a","r","F","o","o"]
Моя проблема в том, что мне нужно, чтобы мой массив был заполнен целыми числами, а не символами. Если я конвертирую пользовательский ввод в Int, он становится одним числом, поэтому, если пользователь вводит «1234», массив заполняется [1234], а не [1,2,3,4]
Поэтому я попытался рассматривать вводимые пользователем данные как строку, создать массив из его символов, а затем перебрать элементы этого массива, преобразовать их в 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'
Что я делаю не так?
3 ответа
Вы можете использовать:
let text : String = "123a"
let digits = Array(text).map { String($0).toInt()! }
// Crash if any character is not int
Но он выйдет из строя, если ввод недействителен.
Вы можете проверить, проверив результат toInt()
:
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
}
Вот гораздо более простое решение для будущих пользователей
let text : String = "12345"
var digits = [Int]()
for element in text.characters
{
digits.append(Int(String(element))!)
}
Преобразование строки в расширение [Int] - версия Swift
Ниже я привожу расширения, которые позволяют конвертировать String
в [Int]
. Это длинная версия, где вы можете увидеть, что происходит в каждой строке с вашей строкой.
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
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
1234
вместо1,2,3,4
, вам не нужен для этого массив.1234
— это одно значениеint
.