【问题标题】:convert user input to array of Ints in swift快速将用户输入转换为 Ints 数组
【发布时间】:2015-02-14 13:08:09
【问题描述】:

我正在尝试制作一个简单的 iOS 游戏来快速学习编程。 用户在文本字段中输入一个 4 位数字(如果重要,键盘类型数字键盘),我的程序应该采用该 4 位数字并将每个数字放入一个数组中。 基本上我想要类似的东西

userInput = "1234"

成为

inputArray = [1,2,3,4]

我知道在 swift 中将字符串转换为字符数组非常容易

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'

我做错了什么?

【问题讨论】:

  • 如果你想要1234 而不是1,2,3,4 那么你不需要一个数组。 1234 是单个 int 值。

标签: ios xcode swift int character


【解决方案1】:

对于未来的用户来说,这是一个更简单的解决方案

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

【讨论】:

    【解决方案2】:

    将字符串转换为 [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
        }
    }
    

    【讨论】:

      【解决方案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
      }
      

      【讨论】:

      • 非常感谢,第一段代码就足够了,因为我将文本字段键盘类型设置为“数字键盘”,因此用户只能输入整数。
      • 是的,这是从字符串中获取字符的正确方法。
      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多