Тест 26. Проблемы с наблюдателями свойств

swift

#1

import UIKit
import Foundation

class Human {
var name: String
var age: Int

var height: Double

var mass: Double
var bodyMassIndex: Double {
    return round(mass / (height * height))
   
    
}
var readyForArmy: Bool = false {
    willSet{
        
    }
    didSet{
        if bodyMassIndex > 20 && bodyMassIndex < 30 && age > 18 && age < 27 {
            readyForArmy = true
        }else{
            readyForArmy = false
        }
        
    }
}
    

var status: String = "" {
    willSet{
        
    }
    didSet{
        if readyForArmy == true {
            status = "\(name) готов идти в армию"
        }else{
            status = "\(name) еще не готов"
        }
    }
}

func conscriptStatus() -> (){
    print(status)
}
init(name: String, age: Int, mass: Double, height: Double) {
    self.name = name
    self.age = age
    self.height = height
    self.mass = mass
    
}

}

Поправьте, пожалуйста, что бы работало.
Чего хочу - проверка, соответствует ли человек критериям призыва в армию, следовательно вывести с помощью метода правильное сообщение.
Сейчас readyForArmy все время false и не могу понять, почему. Я только начал, не пинайте сильно.


#2

слишком сложно сделали, попробуйте так

var readyForArmy: Bool {
    if bodyMassIndex > 20 && bodyMassIndex < 30 && age > 18 && age < 27 {
        return true
    } else {
        return false
    }
}

и должно работать для 25 и 25

или еще короче

var readyForArmy: Bool {
    return bodyMassIndex > 20 && bodyMassIndex < 30 && age > 18 && age < 27
}

#3

Спасибо!
Второй наблюдатель изменил на
var status: String {

        if readyForArmy == true {
            return "\(name) готов идти в армию"
        } else {
            return "\(name) еще не готов"
        }
    }

и код полностью заработал.
Еще раз спасибо!


#4

можно не писать, а просто использовать if readyForArmy


#5

Все не могу привыкнуть к неявному указанию. Спасибо!


#6

да вроде все языки умеют в неявные указания


#7

Раньше ни где не сталкивался. Впервые такой способ увидел в свифте. Собственно, я не особо опытен, лишь теория.


#8

Интересно, на чём же вы писали раньше, раз не сталкивались?)


#9

Да ни на чем не писал. Все грубая теория. Java/Python/Js/PHP/ и даже 1С, простигосподи
В поиске того, что затронет душу :rofl:


#10

Или так

var status: String {
        return readyForArmy ? "\(name) готов идти в армию" : "\(name) еще не готов"
    }