не может вызывать методы класса, недоступен - PullRequest
0 голосов
/ 20 марта 2019

Я только начал изучать, как кодировать пару дней назад, поэтому в основном я создал Class Car со свойствами и функциями внутри, и я хочу получить данные из текстовых полей и применить функцию класса

// Class
}

class Car{
    var carModelCountries: Dictionary <String, String>
    var carYear: Int
    var carEngine: Double
    var Carmodel: String

    init(carModel: String, carYear: Int, carEngine: Double) {
        self.carYear = carYear
        self.carModelCountries = [ "Kia": "Korean",
                          "Mercedes": "Germany",
                          "Chevy": "USA",
                          "Audi": "Germany",
                          "Bentley": "Great Britain"]
        self.carEngine = carEngine
        self.Carmodel = carModel


        func getCarCountry(carModel: String) ->String{
            for (value, key) in self.carModelCountries {
                if key == self.Carmodel{
                    return value
                }
            }

            return "Origin Unknown"

        }

        func getCarAge(carYear: Int) -> String{
            if self.carYear <= 2016{
                return "Car is old"
            }
            return "Car is Brand New"
        }

        func getCarFuelConsumption(forEngine: Double) -> String {
            if self.carEngine >= 3.0 {
                return "Consumes a lot"

            }
            return "Almost Nothing"
        }


    }
    }

// labels  @IBOutlet weak var resultsLabel: UILabel!
    @IBOutlet weak var carModelLabel: UITextField!

    @IBOutlet weak var carYearLabel: UITextField!
    @IBOutlet weak var carEngineLabel: UITextField!

// here I'm trying to initialize the class inside button function and then assign results to result Label
 //button pressed
    @IBAction func getInfoButton(_ sender: Any) {

         var car = Car.init(carModel: carModelLabel.text!, carYear: Int(carYearLabel.text!)!, carEngine: Double(carEngineLabel.text!)!)

        resultsLabel.text = car.getCarAge

    }

Я получаю эту ошибку "Значение типа 'Car' не имеет члена 'getCarAge'"

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Сделать getCarAge и все другие методы экземпляра методов (убрать их из init(...) {...}). В противном случае они видны только в области действия init. Также вы можете удалить параметр метода, так как вы используете свойство класса

class Car {

    ...

    init(...) {...}

    func getCarAge() -> String {
        if self.carYear <= 2016 {
            return "Car is old"
        }
        return "Car is Brand New"
    }

    ...

}

Далее, когда вам нужно вызвать этот метод, вам нужно использовать ()

resultsLabel.text = car.getCarAge()

Кроме того, вы можете сделать ваше getCarAge подсчитанное свойство

init(...) {...}

var carAge: String {
    if carYear <= 2016 {
        return "Car is old"
    }
    return "Car is Brand New"
}

resultsLabel.text = car.carAge
0 голосов
/ 20 марта 2019

Вы поместили getCarAge в метод init.

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