如何从用户输入角色?

时间:2017-03-19 18:24:06

标签: ios swift

我编写代码以在用户输入文本字段时获取字符并使用它们进行数学运算 这个:

@IBOutlet weak internal var textMeli: UITextField!
var myChar = textMeli.text
var numb = [myChar[0]*3 , myChar[1]*7]

但有一个是错的

2 个答案:

答案 0 :(得分:1)

textMeli.textString

myCharString

您无法使用括号表示法从Character访问String

查看String结构的documentation

您将看到可以通过characters属性访问字符串的字符。这将返回Characters的集合。使用集合初始化新数组,然后可以使用括号表示法。

let string = "Foo"
let character = Array(string.characters)[0]

character的类型为Character。 然后,您需要将Character转换为某种数字类型(FloatIntDouble等)以使用乘法。

类型在编程中很重要。确保您保持跟踪,以便了解可以使用的功能和属性。

关掉肥皂盒。看起来你试图取一个字符串并将其转换为数字。我会跳过使用字符的步骤。有两个文本字段,一个接受第一个数字(作为String),另一个接受第二个数字(作为String)。使用number formatter将字符串转换为数字。数字格式器将返回NSNumber。检查documentation,您就会发现可以转换" NSNumber到你想要的任何数字类型。然后你可以使用乘法。

这样的事情:

let firstNumberTextField: UITextField!
let secondNumberTextField: UITextField!

let numberFormatter = NumberFormatter()

let firstNumber = numberFormatter.number(from: firstNumberTextField.text!)
let secondNumber = numberFormatter.number(from: secondNumberTextField.text!)

let firstInt = firstNumber.integerValue //or whatever type of number you need
let secondInt = secondNumber.integerValue

let product = firstInt * secondInt

答案 1 :(得分:0)

处理Swift字符串有点棘手,因为它们处理Unicode和“字形集群”的方式。您无法使用类似的数组语法索引String对象。

Swift也不会将字符视为与C一样的8位int可以互换,所以你不能像你想要的那样对字符进行数学运算。您必须使用String并将其转换为Int类型。

你可以创建一个String类的扩展,让你可以使用字符串的整数下标:

extension String {
  subscript (index: Int) -> String {
    let first = self.startIndex

    let startIndex = self.index(first, offsetBy: index)
    let nextIndex = self.index(first, offsetBy: index + 1)
    return self[startIndex ..< nextIndex]
  }
}

然后:

let inputString = textMeli.text

let firstVal = Int(inputString[0])
let secondVal = Int(inputString[2])

let result = firstVal * 3 + secondVal * 7

请注意,上面的下标扩展名效率很低,并且不适合进行任何类型的“繁重”字符串解析。方括号索引的每次使用都与O(n)性能一样糟糕,这意味着遍历整个字符串会产生几乎O(n^2)的性能,这非常糟糕。

上面的代码也缺少范围检查或错误处理。如果你将一个下标超出范围,它就会崩溃。

请注意,将多个字符作为输入非常奇怪,然后对单个字符进行数学运算,就像它们是单独的值一样。这似乎是非常糟糕的用户界面。

为什么不退出细节并告诉我们您在更高级别尝试做什么?