Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Person.swift
- // Human
- //
- // Created by Student on 16/10/2018.
- // Copyright © 2018 Student. All rights reserved.
- //
- protocol CaseDescribable: CustomStringConvertible, RawRepresentable { }
- extension CaseDescribable where RawValue == String {
- var description: String {
- return self.rawValue
- }
- }
- class Person: CustomStringConvertible {
- enum Gender: String, CaseDescribable {
- case male
- case female
- static func random() -> Gender {
- let randomValue = Int.random(in: 0...1)
- return randomValue == 0 ? .male : .female
- }
- var isMale: Bool {
- return self == .male
- }
- var isFemale: Bool {
- return !self.isMale
- }
- }
- enum Action: String, CaseDescribable {
- case fight
- case childbirth
- case nothing
- }
- struct Names {
- let female = ["anna", "mari", "linda", "sofi"]
- let male = ["Grek", "Mark", "Luka", "Denis"]
- func random(gender: Gender) -> String {
- let names = Gender.female.isFemale ? self.female : self.male
- return names.randomElement() ?? ""
- }
- }
- let gender : Gender
- var kids = [Person]()
- var name = ""
- init(gender : Gender) {
- self.gender = gender
- }
- var description: String {
- let kids = self.kids
- var result = "Person name = \(self.name.uppercased()), gender = \(self.gender), genderSpesification = \(genderSpecification())"
- if !kids.isEmpty {
- result += ", children = \(kids) )"
- }
- return result
- }
- func genderSpecification() {
- }
- }
- class Woman: Person {
- override func genderSpecification() {
- _ = Action.childbirth
- addChild(child())
- }
- func child() -> Person{
- let gender = Gender.random()
- let person = Person(gender: gender)
- person.name = Names().random(gender: gender)
- return person
- }
- func addChild(_ child: Person) {
- if self !== child {
- kids.append(child)
- }
- }
- }
- class Man: Person {
- override func genderSpecification() {
- _ = Action.fight
- }
- }
Add Comment
Please, Sign In to add comment