Что означает подчеркивание в данном случае?

мой код перед переходом на Swift 2.0:

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "RhymeFavoriten") {
        // pass data to next view
        let dest = segue.destinationViewController as! FavoritenViewController
        let source = segue.sourceViewController as! RhymeViewController // !!!!!!
        dest.favoritenType = 1
        dest.delegate = self
    }
}

миграция сказала мне изменить его на

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "RhymeFavoriten") {
        // pass data to next view
        let dest = segue.destinationViewController as! FavoritenViewController
        _ = segue.sourceViewController as! RhymeViewController // !!!!!!!!!!
        dest.favoritenType = 1
        dest.delegate = self
    }

or

    func textSelected(selectedText:String, selectedType:Int) {
        var fullTextArr = text.componentsSeparatedByString("\n")
        var myArray = [String]()  // !!!!!!

to

    func textSelected(selectedText:String, selectedType:Int) {
        var fullTextArr = text.componentsSeparatedByString("\n")
        _ = [String]()    // !!!!!!!!!

Я не вижу, что означает _ = :-(


person Ulli H    schedule 18.09.2015    source источник


Ответы (1)


_ является заполнителем. Это означает, что значения, присвоенные _, игнорируются.

Инструмент миграции Xcode внес эти изменения, поскольку обнаружил, что вы нигде не использовали source или myArray, поэтому заменил эти переменные заполнителем.

Теперь вместо того, чтобы присваиваться переменной, возвращаемый результат segue.sourceViewController as! RhymeViewController и возвращаемый результат [String]() игнорируются.

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

Поэтому, если вам на самом деле не нужны эти инструкции, вы должны полностью избавиться от них.

person Eric Aya    schedule 18.09.2015
comment
они игнорируются или это просто оптимизация компилятора, так как нет необходимости хранить ссылку на переменную, которая не используется? - person some_id; 18.09.2015
comment
Они вычисляются (оцениваются), но возвращаемый результат (если есть) не присваивается памяти, он аннулируется. - person Eric Aya; 18.09.2015
comment
оценивается во время компиляции, а не во время выполнения - person some_id; 18.09.2015
comment
Нет, они оцениваются во время выполнения. Но результат игнорируется (не присваивается переменной). Если эти функции имеют побочные эффекты, эти эффекты будут иметь место; просто если они что-то вернут, эта вещь будет проигнорирована. - person Eric Aya; 18.09.2015
comment
@ Эрик Д. большое спасибо! Это логично, и я это понимаю ;-) - person Ulli H; 18.09.2015