Guest User

Untitled

a guest
Oct 17th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. //
  2. // Person.swift
  3. // Human
  4. //
  5. // Created by Student on 16/10/2018.
  6. // Copyright © 2018 Student. All rights reserved.
  7. //
  8. protocol CaseDescribable: CustomStringConvertible, RawRepresentable { }
  9. extension CaseDescribable where RawValue == String {
  10.  
  11. var description: String {
  12. return self.rawValue
  13. }
  14. }
  15.  
  16.  
  17.  
  18. class Person: CustomStringConvertible {
  19.  
  20. enum Gender: String, CaseDescribable {
  21. case male
  22. case female
  23.  
  24. static func random() -> Gender {
  25. let randomValue = Int.random(in: 0...1)
  26.  
  27. return randomValue == 0 ? .male : .female
  28. }
  29. var isMale: Bool {
  30. return self == .male
  31. }
  32.  
  33. var isFemale: Bool {
  34. return !self.isMale
  35. }
  36. }
  37.  
  38. enum Action: String, CaseDescribable {
  39. case fight
  40. case childbirth
  41. case nothing
  42. }
  43. struct Names {
  44. let female = ["anna", "mari", "linda", "sofi"]
  45. let male = ["Grek", "Mark", "Luka", "Denis"]
  46.  
  47. func random(gender: Gender) -> String {
  48. let names = Gender.female.isFemale ? self.female : self.male
  49.  
  50. return names.randomElement() ?? ""
  51. }
  52. }
  53.  
  54. let gender : Gender
  55. var kids = [Person]()
  56. var name = ""
  57.  
  58. init(gender : Gender) {
  59. self.gender = gender
  60. }
  61.  
  62. var description: String {
  63. let kids = self.kids
  64. var result = "Person name = \(self.name.uppercased()), gender = \(self.gender), genderSpesification = \(genderSpecification())"
  65. if !kids.isEmpty {
  66. result += ", children = \(kids) )"
  67. }
  68.  
  69. return result
  70. }
  71.  
  72. func genderSpecification() {
  73.  
  74. }
  75. }
  76.  
  77. class Woman: Person {
  78. override func genderSpecification() {
  79. _ = Action.childbirth
  80. addChild(child())
  81. }
  82. func child() -> Person{
  83. let gender = Gender.random()
  84. let person = Person(gender: gender)
  85. person.name = Names().random(gender: gender)
  86.  
  87. return person
  88. }
  89. func addChild(_ child: Person) {
  90. if self !== child {
  91. kids.append(child)
  92. }
  93. }
  94. }
  95.  
  96. class Man: Person {
  97. override func genderSpecification() {
  98. _ = Action.fight
  99. }
  100. }
Add Comment
Please, Sign In to add comment