Swift 静态成员';米莱蒂梅弗';无法在类型为';跑步训练';

Swift 静态成员';米莱蒂梅弗';无法在类型为';跑步训练';,swift,Swift,我的打印行出现错误,原因如下: 静态成员“mileTimeFor”不能用于类型为“RunningOutput”的实例 我不知道如何修理它。任何帮助都将不胜感激。首先,您试图使用类型的实例访问类型函数,这是错误的。当您声明类型函数(例如静态)时,必须使用类型本身来访问它 现在,您的目的是根据每个实例的值计算一些东西。所以你需要有一个实例函数。比如: struct RunningWorkout { var distance: Double var time: Double v

我的打印行出现错误,原因如下:

静态成员“mileTimeFor”不能用于类型为“RunningOutput”的实例


我不知道如何修理它。任何帮助都将不胜感激。

首先,您试图使用
类型
的实例访问
类型
函数,这是错误的。当您声明
类型
函数(例如静态)时,必须使用
类型
本身来访问它

现在,您的目的是根据每个实例的值计算一些东西。所以你需要有一个实例函数。比如:

struct RunningWorkout {
    var distance: Double
    var time: Double
    var elevation: Double
    static func mileTimeFor(distance: Double, time: Double) -> Double {
        return (distance/1600)/time  
    }
}
let running = RunningWorkout(distance: 3200, time: 30, elevation: 1100)
print(running.mileTimeFor)
如果要使用上述函数计算值,还需要传递参数。这意味着您必须调用函数调用,如下所示:

func mileTimeFor(distance: Double, time: Double) -> Double {
    return (distance/1600)/time
}
但您可以将函数签名更改为更紧凑,如:

running.mileTimeFor(distance: 100, time: 60)
或者,正如@Leo Dabus评论的那样,您在Swift中有另一个选项。您可以使用与上述函数完全相同的
计算变量(
mileTimeFor()
):


tldr:删除
static
关键字

对类实例使用静态func,但必须对类本身使用。跑步锻炼。mileTimeFor(距离:Double,时间:Double)您需要的是一个计算属性
var mileTime:Double{return time/(距离/1600)}
func mileTimeFor() -> Double {
    return (distance/1600)/time
}
// call this as:
running.mileTimeFor()
var mileTimeFor: Double {
    return (distance/1600)/time
}
// use this as:
running.mileTimeFor