为什么 figure.area = ... 不起作用? Swift 3.0

Why won't figure.area = ... not work? Swift 3.0

struct Shape{

    struct Rectangle {
        var length = 0
        var width = 0
        var area: Float = 0

    }

    struct Square {
        var length = 0
        var width = 0
        var area: Float = 0

    }

    func area(length: Float, width: Float) -> Float {
        return length * width
    }

}

var figure = Shape.Rectangle()
figure.width = 2; figure.length = 3

figure.area = Shape.area(figure.length,figure.width)

为什么 figure.area = ... 不起作用?它允许我在 xCode 中编写,但它在 PlayGround 中不正确 运行。你能在结构中声明一个函数吗?如果是,我如何正确声明此 (figure.area = Shape.area(figure.length,figure.width))?

你在调用area的时候没有初始化Shape的实例,所以编译器会混淆。

您可以初始化一个 Shape 实例,然后调用 area

Shape().area(etc...)

或者将 area 函数设为静态函数,然后您就可以像以前一样调用它(无论如何是一个更好的选择)

例如

struct Shape{

....

    static func area(length: Float, width: Float) -> Float {
        return length * width
    }

}

此外,对于 swift 3,所有参数都必须显式写入,除非在函数声明中它们之前有下划线。所以你的函数调用应该是这样的

figure.area = Shape.area(length: figure.length, width: figure.width)