Использование пользовательских классов - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь создать экземпляр пользовательского объекта под названием Rock.С этим кодом, «содержит» является переменной типа Item, и оба Rock и Bug являются подклассами Item.Код генерирует ошибки, когда я пытаюсь создать экземпляр Rock, но не Bug.Разве это не то, как вы создаете экземпляр класса?Он говорит: «не может присвоить значение типа Rock.Type для типа« item ».

Кроме того, мне было интересно, как бы я написал код для запроса объекта« содержит », какой класс объекта он содержит.функция для этого?

    for r in 0...map.MAXROWS{
        for c in 0...map.MAXCOLUMNS{
            if (r < 3) || (r > (MAXROWS - 3)){
                self.contains = Rock
            }else if (c < 3) || (c > (MAXCOLUMNS - 3)){
                self.contains = Rock
            }else if (r == 3) && (c == 100){
                self.contains = Bug(index: 1, map: map)
            }else if (arc4random() * 100 == 1){
                self.contains = Bug(index: current, map: map)
                current = current + 1
            }else if (arc4random() * 8) == 1{
                self.contains = Rock
            }
        }
    }


import Cocoa

class Bug: Item {
    var male = true
    var direction = 1
    var appearance = 1
    var positionRow = 0
    var positionColumn = 0

    // Direction:
    // 1 = Up
    // 2 = Right
    // 3 = Down
    // 4 = Left

    init(index: Int, map: Map){
        super.init()
        map.initializeBugs(index: index, current: self)
        if (index == 1){
            self.direction = 3
            self.positionRow = 3
            self.positionColumn = 100
        }else{
            self.direction = (Int(arc4random() * 4)) + 1
        }
        Birth(index: index)
    }

    func Birth(index: Int){
        if (arc4random() * 8) == 1{
            self.male = false
        }else{
            self.male = true
            if (arc4random() * 2) == 1{
                self.appearance = 1
            }else{
                self.appearance = 2
            }
        }
    }

    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
                }
            }
        }
    }

    func WhereAreYouRow() -> Int{
        return self.positionRow
    }

    func WhereAreYouColumn() -> Int{
        return self.positionColumn
    }

    func AreYouBug() -> Bool{
        return true
    }

    func InstantiateBug{

    }
}



import Cocoa

class Rock: Item {

    override init(){
        super.init()
    }

    func AreYouRock() -> Bool{
        return true
    }

1 Ответ

0 голосов
/ 17 февраля 2019

вам нужно использовать конструктор для создания экземпляров таких классов, как: Rock() или Bug()

При вызове просто Rock или Bug, без (), на который вы ссылаетесь на класс,то, что вы хотите сделать, это создать объект, и поэтому вам нужно ()


Короче говоря:

Классы : Rock, Bug

Объекты : Rock(), Bug()

, поэтому в вашем коде вы хотите присвоить self.contains = Object, что означает:

self.contains = Rock()или self.contains = Bug()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...