Метки аргументов '(stringInterpolationSegment :)' не соответствуют никаким доступным перегрузкам - PullRequest
1 голос
/ 27 марта 2019

После обновления последней версии Xcode 10.2 (10E125) я получаю эту ошибку:

Метки аргумента '(stringInterpolationSegment :)' не соответствуют никаким доступным перегрузкам

Не можете найти какое-либо решение, есть идеи?

let interpolation1 = String(stringInterpolationSegment:self.addSpotAnnotation!.coordinate.latitude)
let interpolation2 = String(stringInterpolationSegment:self.addSpotAnnotation!.coordinate.longitude)
let coordinate:String = interpolation1 + "," + interpolation2

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Ошибка из-за изменения в том, как работает строковая интерполяция в Swift 5.

Решением является , а не для замены String(stringInterpolationSegment:) на String(stringInterpolation:):

Мы не предлагаем сохранять существующие инициализаторы init (stringInterpolation :) или init (stringInterpolationSegment :), поскольку они всегда были задокументированы как вызовы , которые не должны использоваться непосредственно .[выделение добавлено]

Пример, который вы привели:

coordinate:String = 
      String(stringInterpolationSegment: self.addSpotAnnotation!.coordinate.latitude) 
    + "," 
    + String(stringInterpolationSegment: self.addSpotAnnotation!.coordinate.longitude)

гораздо проще записать как:

let coordinate = "\(self.addSpotAnnotation!.coordinate.latitude),\(self.addSpotAnnotation!.coordinate.longitude)"
1 голос
/ 13 июня 2019
public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool {
    return  "\(lhs)" == "\(rhs)"
}
1 голос
/ 27 марта 2019

Обновления строковой интерполяции

Swift 4.2 реализует интерполяцию строк с помощью интерполяции сегментов:

let language = "Swift"
let languageSegment = String(stringInterpolationSegment: language)
let space = " "
let spaceSegment = String(stringInterpolationSegment: space)
let version = 4.2
let versionSegment = String(stringInterpolationSegment: version)
let string = String(stringInterpolation: languageSegment, spaceSegment, versionSegment)

В этом коде компилятор сначала оборачивает каждый буквенный сегмент, а затем интерполирует один с init(stringInterpolationSegment:) .Затем он объединяет все сегменты вместе с init (stringInterpolation:)

Swift 5 использует совершенно другой подход

// 1
var interpolation = DefaultStringInterpolation(
literalCapacity: 7,
interpolationCount: 1)
// 2
let language = "Swift"
interpolation.appendLiteral(language)
let space = " "
interpolation.appendLiteral(space)
let version = 5
interpolation.appendInterpolation(version)
// 3
let string = String(stringInterpolation: interpolation)

Вот что делает этот код:

Определить DefaultStringInterpolation экземпляр с определенной емкостью и счетчиком интерполяции.Вызовите appendLiteral (:) или appendInterpolation (:) , чтобы добавить литералы и интерполированные значения к интерполяция .Создайте последнюю интерполированную строку, вызвав init (stringInterpolation:)

credit: raywenderlich

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...