Невозможно вызвать значение нефункционального типа DrawCircleSegment - PullRequest
0 голосов
/ 03 октября 2019

Как начинающий программист, я пробовал много решений следующей проблемы, но, похоже, ни одно из них не работает. Кроме того, ответы, представленные на этом форуме, кажутся слишком сложными для меня, чтобы быть полезными. Таким образом, помощь будет принята с благодарностью. Также пытаюсь понять, почему этот кусок не скомпилируется, тогда как если я введу жестко запрограммированные значения, он будет.


    struct ContentView: View {
        static let segmentCount = 2
        var DrawArc = DrawCircleSegment()
        var body: some View {

            VStack {
                ForEach(1..<ContentView.segmentCount){ i in
                    DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)
                }
            }
        }
    }
struct DrawCircleSegment: View {
    let r: CGFloat
    var center_x: CGFloat
    var center_y: CGFloat
    var arc_start: Angle
    var arc_end: Angle
    var arc_width: CGFloat

    init() {
        r = 0.0
        center_x = 0.0
        center_y = 0.0
        arc_end = Angle(degrees: 0.0)
        arc_start = Angle(degrees: 0.0)
        arc_width = 0.0
    }

    var body: some View {
        Path { path in

            path.addArc(center: CGPoint(x: center_x, y: center_y), radius: r, startAngle: arc_start, endAngle: arc_end, clockwise: false)
            path.addLine(to: CGPoint(x: 100.0, y: 200.0))
            path.addArc(center: CGPoint(x: 100.0, y:100.0), radius: r * 2, startAngle: Angle(degrees:90.0), endAngle: Angle(degrees:0.0), clockwise: true)
            path.addLine(to: CGPoint(x:200, y:100))
                }
        .fill(Color(red: 79.0 / 255, green: 79.0 / 255, blue: 191.0 / 255))
    }
}

1 Ответ

0 голосов
/ 03 октября 2019

var DrawArc = DrawCircleSegment()

Этот код создает экземпляр / объект типа DrawCircleSegment Так что DrawCircleSegment - это резак печенья, drawArc (примечание ниже по поводу именования переменных Swift) будет куки-файлом.

Таким образом, вызов DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100, arc_start: 0, arc_end: 90, arc_width: 30) неверен, поскольку вы пытаетесь инициализировать значение из значения, а не из типа.

Измените

DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)

на

DrawCircleSegment(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)

Если вы хотите использовать псевдоним, чтобы дать ему более короткое имя, вы можете сделать это:

typealias DrawArc = DrawCircleSegment

ТОГДА вы можете DrawArc инициализировать его.

Sidenote:

В Swift мы используем стиль lowerCamelCase для имен переменных и используем только UpperCamelCase для типов. Вы должны оформить заказ Руководство по стилю Swift

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