Ошибка Swift: не удается вызвать ‘append’ с аргументом типа списка ‘(строка)’

#swift #string

#swift #строка

Вопрос:

Я только начинаю изучать Swift. Я посмотрел видео о начале работы с базовым программированием swift и скопировал код инструктора непосредственно в свой Xcode. Однако я получаю ошибку в своем коде, которую он не получил в своем. Я трижды проверил, что я сделал все то же самое. Код приведен ниже. Последняя строка выдает ошибку в теме.

 var items:[String] = []

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func additem(sender: AnyObject) {
    if (txtinput.text! == ""){
        return
    }
    items.append(txtinput.text!)
    txtoutput.text = ""
    for item in items {
        txtoutput.text.append("(item)n")
  

Комментарии:

1. Какую версию Xcode и какую версию Swift вы используете?

2. и что такое txtoutput ?

Ответ №1:

Предположительно text имеет тип String . String не вызывается метод append . Обычно вы бы использовали…

  txtoutput.text = txtoutput.text   "(item)n"    // or
 txtoutput.text  = "(item)n"
  

Однако также возможно написать расширение, чтобы вы могли вызывать append . Возможно, это то, что существовало в примере, который вы видели?

 extension String {
    mutating func append(str: String) {
        self = self   str
    }
}
  

Комментарии:

1.Обратите внимание, что в Swift 3 String есть метод. append(_:)

Ответ №2:

Вам нужно добавить строку к существующей строке. Итак, в вашем случае:

 @IBAction func additem(sender: AnyObject) {
    if (txtinput.text! == ""){
        return
    }
    items.append(txtinput.text!)
    txtoutput.text = ""   

    for item in items {
        txtoutput.text = (txtoutput.text)!   "(item)n"
    }
}
  

Комментарии:

1. черт возьми … заняло у меня слишком много времени… Майкл был быстрее 🙂

2. Но и для вас тоже, поскольку у OP, вероятно, есть необязательный параметр.