为什么 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)
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)