2015-06-16 2 views
4

Недавно я пытался создать пользовательский класс UITableViewCell, добавив незначительный улучшенный UITextField. Я также кодирую в swift 2, и я понял эту ошибку, перекомпилировав проект в бета-версии Xcode 7. Я инициализировал массив путем вызова пользовательского метода init.Невозможно подстроить значение типа '[String]' с индексом типа 'Int'

Heres мой код:

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

Я не имею ни малейшего понятия, что это может b e ... Может кто-нибудь мне помочь.

Большое вам спасибо!

ответ

2

Как Свифт 2, вы не можете просто перебирает String больше перечислять символы, теперь вы должны вызвать метод characters на самых строках:

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

Так что для вас, учитывая, что objectAttributeValues[countOfRun], кажется, возвращает строку, которая будет:

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

Это потому, что String не соответствует SequenceType больше в Swift 2.

-3

Как сказал Эрик, с Swift 2 вы больше не можете просто пройти через такую ​​String.

На мой взгляд, самый простой и, скорее всего, лучший программно правильный способ сделать это будет с функцией.

так

func example(s: Int, str: String) -> Character { 
    var count = 0 
    for character in str { 
     if(count == s) 
      return character 
     count++ 
    } 
    return " " 
} 
+1

Вы превратили простой O (1) подстановок в O (N) поиска! – Gino

Смежные вопросы