Не удается преобразовать значение типа ‘String’ в ожидаемый тип аргумента ‘DefaultStringInterpolation’

#swift5

#swift5

Вопрос:

Я обновил свое приложение swift 4.2 до Swift 5 и получаю эту ошибку. Кто-нибудь знает, как исправить?

Файл с использованием: GMStepper.swift

Ошибка: не удается преобразовать значение типа ‘String’ в ожидаемый тип аргумента ‘DefaultStringInterpolation’

 if self.showIntegerIfDoubleIsInteger amp;amp; floor(self.value) == self.value {
            label.text = String(stringInterpolation: "(Int(self.value))(self.suffixString)")
        } else {
            label.text = String(stringInterpolation: "(Int(self.value))(self.suffixString)")
        }
  

Ответ №1:

Вы должны сделать так :

 if self.showIntegerIfDoubleIsInteger amp;amp; floor(self.value) == self.value {
        let intValue =  Int(self.value)
        label.text = String(stringInterpolation: "(intValue)(self.suffixString)")
    } else {
        let intValue =  Int(self.value)
        label.text = String(stringInterpolation: "(intValue))(self.suffixString)")
    }
  

Ответ №2:

Вы не должны вызывать String.init(stringInterpolation:) напрямую.

init(stringInterpolation:)

Обсуждение

Не вызывайте этот инициализатор напрямую. Он используется компилятором при создании строки с использованием интерполяции строк. Вместо этого используйте интерполяцию строк для создания новой строки, включая значения, литералы, переменные или выражения, заключенные в круглые скобки, с префиксом обратной косой черты ( (…) ).

Почему бы вам просто не написать свой код как:

     if self.showIntegerIfDoubleIsInteger amp;amp; floor(self.value) == self.value {
        label.text = "(Int(self.value))(self.suffixString)"
    } else {
        label.text = "(Int(self.value))(self.suffixString)"
    }