Swift 在函数中使用实例

Swift 在函数中使用实例,swift,Swift,我是Swift新手,所以我一直在使用Swift游乐场应用程序。在2级“两位专家”中,我初始化了两位专家: let expert1 = Expert() let expert2 = Expert() 我想做的是创建一个函数并将任何实例传递给它,访问它的方法等等,比如: func actions(who: Item, distance: Int, turn: String) { for 0 to distance { who.moveforward() } ff tu

我是Swift新手,所以我一直在使用Swift游乐场应用程序。在2级“两位专家”中,我初始化了两位专家:

let expert1 = Expert()

let expert2 = Expert()
我想做的是创建一个函数并将任何实例传递给它,访问它的方法等等,比如:

func actions(who: Item, distance: Int, turn: String) {

for 0 to distance {

        who.moveforward()
}

   ff turn == “Left” {

    who.turnleft()

   } else if turn == “Right” {

     who.turnright()

}

}
谁是专家1或专家2

我找不到这样做的方法,因此不得不写两次相同的动作:

Func actions(who: String, distance: Int, turn:String) {

   if who == “expert1” {

      for 0 to distance {

      expert1.moveforward()

}   Etc

 if who == “expert2” {

      for 0 to distance {

      expert2.moveforward()

}   Etc

是否有一种方法可以将实例传递到函数中,然后执行特定类的特定操作?

由于您的专家属于
Expert
类型,因此如果我正确理解代码,那么
actions
方法中的
who
参数应该属于
Expert
类型。然后,您不需要为每个
Expert
s使用两个函数。让我知道我是否正确地理解了你,以及它是否有效

更新 @Alexander提到,您也可以在
Expert
的扩展中使用这些方法,如下所示:

extension Expert {
    func actions(distance: Int, turn: String) {
        // Add method code here
    }
}

在扩展中添加方法时,每个
Expert
对象都可以使用该方法。所以你可以写
expert1.actions(1,“左”)
或者类似的东西。下面是官方的Swift编程语言指南中关于扩展的一部分。

我试图格式化您的代码,但有些大括号仍然没有打开。请尝试修复缩进。为什么所有内容都以大写字母开头,
Let
Func
If
Else
For
-看起来像****一样奇怪。对使用
let
func
if
else
。这是一个非常草率的问题。最好删除“who”参数,并在
专家
的扩展中使用这些方法。是的,我同意,但是我的答案基于最小的变化,这将使代码编译,因为OP对Swift来说是新的。“因为OP对Swift来说是新的。”这似乎是一个很好的理由,可以花点时间教他们关于扩展的知识。