【问题标题】:Cannot subscript a value of type '[String]' with an index of type 'Int'无法使用“Int”类型的索引为“[String]”类型的值下标
【发布时间】:2015-06-16 18:25:07
【问题描述】:

我最近试图通过添加一个小的改进 UITextField 来构建一个自定义 UITableViewCell 类。 我也在 swift 2 中编码,我通过在 Xcode 7 beta 中重新编译项目来意识到这个错误。 我通过调用自定义的 init 方法初始化了数组。

这是我的代码:

初始化方法

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 EditingChanged

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] {

我不知道它可能是什么...... 谁能帮帮我。

非常感谢!

【问题讨论】:

    标签: ios xcode swift swift2 xcode7


    【解决方案1】:

    从 Swift 2 开始,您不能简单地遍历 String 来枚举字符,现在您必须在字符串本身上调用 characters 方法:

    for letter in "hello".characters {
        print(letter)
    }
    

    所以对你来说,鉴于objectAttributeValues[countOfRun] 似乎返回一个字符串,那就是:

    for character in objectAttributeValues[countOfRun].characters {
        ...
    }
    

    这是因为 String 在 Swift 2 中不再符合 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 " "
      }
      

      【讨论】:

      • 您已经将简单的 O(1) 查找变成了 O(n) 查找!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多