Ios 如何从用户输入中获取子字符串?

Ios 如何从用户输入中获取子字符串?,ios,swift,Ios,Swift,我编写了代码,当用户在文本字段中输入字符并对其进行运算时,获取字符 这: 但是有一个是错误的textMeli。text是一个字符串 myChar是一个字符串 不能使用括号表示法从字符串访问字符 let string = "Foo" let character = Array(string.characters)[0] 查看字符串结构的 您将看到可以通过characters属性访问字符串的字符。这将返回字符的集合。使用集合初始化一个新数组,然后可以使用括号表示法 let string = "Fo

我编写了代码,当用户在文本字段中输入字符并对其进行运算时,获取字符 这:


但是有一个是错误的

textMeli。text
是一个
字符串

myChar
是一个
字符串

不能使用括号表示法从
字符串
访问
字符

let string = "Foo"
let character = Array(string.characters)[0]
查看
字符串
结构的

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

let string = "Foo"
let character = Array(string.characters)[0]
字符
将属于
字符
类型。 然后需要将
字符
转换为某种数字类型(
浮点
整数
双精度
,等等)以使用乘法

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

从肥皂盒里拿出来。看起来您正在尝试获取字符串并将其转换为数字。我会跳过使用字符的步骤。有两个文本字段,一个接受第一个数字(作为
字符串
),另一个接受第二个数字(作为
字符串
)。使用将字符串转换为数字。数字格式化程序将返回NSNumber。查看,您将看到可以将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

处理Swift字符串有点棘手,因为它们处理Unicode和“grapheme集群”的方式。不能使用这样的数组语法索引字符串对象

Swift也不像C那样将字符与8位
int
s互换,所以你不能像现在这样对字符进行数学运算。您必须将
字符串
转换为
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]
  }
}

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

上面的代码还缺少范围检查或错误处理。如果传递的下标超出范围,它将崩溃

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


你为什么不从细节上退一步,告诉我们你在更高层次上想做什么

您的数学错误或输入的字符错误?伙计,用户在文本字段中输入10个数字,我需要从文本字段中获取字符并保存到变量中,然后使用10个数字进行数学运算,并将结果显示给用户,例如用户给文本字段2345123456,我需要这样做:number1=2,number2=3,number3=4,number4=5,number6=1,,,,,,,,,,实际上,您不能在Swift 3中使用
字符[0]
。String.characters为您提供了类型为
String.CharacterView
的结果,您必须使用类型为
String.CharacterView.Index
的值才能对其进行索引。@Duncan C是的,您是对的。苹果的文档仍然声称这是可能的,但实际上并没有尝试运行或构建代码。我已经解决了这个问题。
let inputString = textMeli.text

let firstVal = Int(inputString[0])
let secondVal = Int(inputString[2])
let result = firstVal * 3 + secondVal * 7