Не удается преобразовать значение типа ‘CGFloat’ в тип результата закрытия ‘CGPoint’

#swift

#swift

Вопрос:

Пожалуйста, рассмотрите следующее:

 struct Entry {
    let points: [CGPoint]

    func squeezePoints(_ multiplier: CGFloat) -> [CGPoint]{
        return points.map{$0.x * multiplier}
    }
}
  

Код не компилируется из-за ошибки: Cannot convert value of type 'CGFloat' to closure result type 'CGPoint'

Ответ №1:

Вы пытаетесь сопоставить с CGFloat , но объявили возвращаемый тип вашей функции как [CGPoint] . Если вы хотите умножить координату x каждой точки, измените свою функцию, чтобы отобразить на a CGPoint и сохранить y неизмененным.

 func squeezePoints(_ multiplier: CGFloat) -> [CGPoint]{
    return points.map{CGPoint(x: $0.x * multiplier, y: $0.y)}
}
  

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

1. точки уже [CGPoint], я только изменяю каждое из них по X значений.

2. @EvgeniyKleban Вы не изменяете значение X. Вы возвращаете умноженное значение X (и только значение X, а не точку).

3. почему, я сопоставляю массив с изменением одного из его значений, другое должно оставаться неизменным.

4. @EvgeniyKleban карта это не метод изменения. Вам потребуется выполнить итерацию индексов массива и изменить каждый элемент вашего массива

5. да, но я не пытаюсь изменить массив точек, а вместо этого возвращаю его с изменением одного из его значений..