无法使用 'Int' 类型的索引下标“[String]”类型的值
Cannot subscript a value of type '[String]' with an index of type 'Int'
我最近试图通过添加一个小改进的 UITextField 来构建自定义 UITableViewCell Class。
我也在 swift 2 中编码,我通过在 Xcode 7 beta 中重新编译项目意识到了这个错误。
我通过调用自定义初始化方法初始化了数组。
这是我的代码:
初始化方法
init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?) {
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
IBACTION 编辑已更改
currentInputCount = "\(TextField.text)".characters.count
var indexOfArray: Int = 0
countOfRun = 0
if currentInputCount == 0 {
countOfRun = 0
formerInputCount = 0
editingDidEndForTextField = false
concatenedWord = []
Placeholder.text = ""
}
if !editingDidEndForTextField && currentInputCount > 0 {
while countOfRun < dataObject.count {
if !backspaceWasPressed() {
var arrayOfCharacters: [String] = []
if countOfRun <= dataObject.count - 1 {
for character in objectAttributeValues[countOfRun] {
let string = String(character)
arrayOfCharacters.append(string)
}
}
var convertedStringInFormOfArrayOfStrings: [String] = arrayOfCharacters
if currentInputCount == 1 {
concatenedWord.append(convertedStringInFormOfArrayOfStrings[currentInputCount-1])
}
else if countOfRun > 0 {
if objectAttributeValues[countOfRun].characters.count != concatenedWord[countOfRun].characters.count {
concatenedWord[countOfRun] = concatenedWord[countOfRun] + convertedStringInFormOfArrayOfStrings[currentInputCount-1]
}
}
countOfRun += 1
}
错误出现在行:
for character in objectAttributeValues[countOfRun] {
我不知道它可能是什么......
谁能帮帮我。
非常感谢!
从 Swift 2 开始,您不能再简单地遍历 String
来枚举字符,现在您必须调用 String 本身的 characters
方法:
for letter in "hello".characters {
print(letter)
}
所以对你来说,鉴于 objectAttributeValues[countOfRun]
似乎 return 一个字符串,那将是:
for character in objectAttributeValues[countOfRun].characters {
...
}
这是因为String
在Swift中不再符合SequenceType
2.
正如 Eric 所说,从 Swift 2 开始,您不能再像那样只遍历 String 了。
在我看来,最简单、最有可能是编程上最正确的方法是使用函数。
所以
func example(s: Int, str: String) -> Character {
var count = 0
for character in str {
if(count == s)
return character
count++
}
return " "
}
我最近试图通过添加一个小改进的 UITextField 来构建自定义 UITableViewCell Class。 我也在 swift 2 中编码,我通过在 Xcode 7 beta 中重新编译项目意识到了这个错误。 我通过调用自定义初始化方法初始化了数组。
这是我的代码:
初始化方法
init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?) {
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
IBACTION 编辑已更改
currentInputCount = "\(TextField.text)".characters.count
var indexOfArray: Int = 0
countOfRun = 0
if currentInputCount == 0 {
countOfRun = 0
formerInputCount = 0
editingDidEndForTextField = false
concatenedWord = []
Placeholder.text = ""
}
if !editingDidEndForTextField && currentInputCount > 0 {
while countOfRun < dataObject.count {
if !backspaceWasPressed() {
var arrayOfCharacters: [String] = []
if countOfRun <= dataObject.count - 1 {
for character in objectAttributeValues[countOfRun] {
let string = String(character)
arrayOfCharacters.append(string)
}
}
var convertedStringInFormOfArrayOfStrings: [String] = arrayOfCharacters
if currentInputCount == 1 {
concatenedWord.append(convertedStringInFormOfArrayOfStrings[currentInputCount-1])
}
else if countOfRun > 0 {
if objectAttributeValues[countOfRun].characters.count != concatenedWord[countOfRun].characters.count {
concatenedWord[countOfRun] = concatenedWord[countOfRun] + convertedStringInFormOfArrayOfStrings[currentInputCount-1]
}
}
countOfRun += 1
}
错误出现在行:
for character in objectAttributeValues[countOfRun] {
我不知道它可能是什么...... 谁能帮帮我。
非常感谢!
从 Swift 2 开始,您不能再简单地遍历 String
来枚举字符,现在您必须调用 String 本身的 characters
方法:
for letter in "hello".characters {
print(letter)
}
所以对你来说,鉴于 objectAttributeValues[countOfRun]
似乎 return 一个字符串,那将是:
for character in objectAttributeValues[countOfRun].characters {
...
}
这是因为String
在Swift中不再符合SequenceType
2.
正如 Eric 所说,从 Swift 2 开始,您不能再像那样只遍历 String 了。
在我看来,最简单、最有可能是编程上最正确的方法是使用函数。
所以
func example(s: Int, str: String) -> Character {
var count = 0
for character in str {
if(count == s)
return character
count++
}
return " "
}