У меня есть следующий простой, свежий проект с одним представлением в Xcode 10 с Swift 4.2.

Я допустил опечатку в строковой интерполяции первой строки, но компилятор не жалуется и код запускается.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let number: Int = 50
        var string = "\(number.numberString, withValue: false) lbs"
        print(string)
        string = "\(number.numberString(withValue: false)) lbs"
        print(string)
    }
}
extension Int {
    func numberString(withValue value: Bool) -> String {
        if value == true {
            return "value"
        } else {
            return String(self)
        }
    }
}

Распечатка:

((Function), withValue: false) lbs
50 lbs

Он принимает первый параметр как «(Функция)» и сообщает остальной текст внутри круглых скобок как часть текста, но редактор не отображает его как текст. Что-то я не понимаю в синтаксисе интерполяции строк? или это проблема / ошибка компилятора?

Спасибо

0
eharo2 4 Окт 2018 в 17:43

1 ответ

Лучший ответ

Он отображает именно то, что вы запрашиваете. Вы оцениваете:

(number.numberString, withValue: false)

Это кортеж с непомеченным значением функции и помеченным логическим значением. Описание этого кортежа будет таким:

((Function), withValue: false)

3
Rob Napier 4 Окт 2018 в 14:59