在子类中调用例程

时间:2019-02-18 14:09:25

标签: swift

我有一个用户定义的类Map,其中有一个实例图。地图包含网格类型的用户定义对象的二维数组,称为正方形。 Grid类包含一个名为contains的变量,该变量包含许多可能的用户定义类的一个对象。我试图从Grid模块中调用用户定义的类Bug中的函数。

执行此操作的正确语法是什么?

//within Class Grid

func GenerateImage() -> Int{

        if self.containType == 1{
            return self.contains.DisplayBug()
        }else if self.containType == 2{
            return 13
        }else{
            return 0
        }
    }

//within class Bug

func DisplayBug() -> Int{
    if self.male == false{
        return self.direction
    }else{
        if self.appearance == 1{
            switch self.direction{
            case 1:
                return 5
            case 2:
                return 6
            case 3:
                return 7
            case 4:
                return 8
            default:
                return 0
            }
        }else if self.appearance == 2{
            switch self.direction{
            case 1:
                return 9
            case 2:
                return 10
            case 3:
                return 11
            case 4:
                return 12
            default:
                return 0
            }
        }else{
            return 0
        }
    }
}

1 个答案:

答案 0 :(得分:0)

由于您没有提供这些类的实现,因此我自由地为您所拥有的类建立了示例结构:

class Grid {
    let contains: SomeProtocol

    init(contains: SomeProtocol) {
        self.contains = contains
    }
}

class Map {
    let squares: [[Grid]]

    init(squares: [[Grid]]) {
        self.squares = squares
    }
}

如您所见,contains属性的类型为SomeProtocol,其定义如下:

protocol SomeProtocol {
    func displayBug()
}

接下来是实现该协议的类(这只是一个示例,用来说明displayBug方法的实现可能会有所不同):

class Bug: SomeProtocol {
    func displayBug() {
        print("called from Bug")
    }
}
class Foo: SomeProtocol {
    func displayBug() {
        print("called from Foo")
    }
}
class Bar: SomeProtocol {
    func displayBug() {
        print("called from Bar")
    }
}
class Buz: SomeProtocol {
    func displayBug() {
        print("called from Buz")
    }
}

现在该层次结构已经就绪,我们可以对其进行测试:

let map = Map(squares: [
    [
        Grid(contains: Bug()),
        Grid(contains: Foo())
    ],
    [
        Grid(contains: Bar()),
        Grid(contains: Buz())
    ]
])

for gridArray in map.squares {
    for grid in gridArray {
        grid.contains.displayBug()
    }
}
  

从Bug调用

     

从Foo打电话

     

从酒吧叫来

     

从布兹(Buz)呼叫