Guest User

Untitled

a guest
Jan 22nd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. class a {
  2. var p: String!
  3. init() {
  4. self.p = "class a"
  5. }
  6. }
  7. class b {
  8. var p: String!
  9. init() {
  10. self.p = "class b"
  11. }
  12. }
  13.  
  14. // ここではクラスa専用になっているが、クラスbでも共通で利用したい
  15. class monitor {
  16. var i: a!
  17. init() {
  18. self.i = a()
  19. print(self.i.p) // class a
  20. }
  21. }
  22. let i = monitor() // クラスaかbを渡して、共通のpを参照させたい
  23.  
  24. import Foundation
  25.  
  26. //
  27. //インスタンスを渡す
  28. //
  29. protocol MonitorTargetType {
  30. var monitoredProperty: String {get}
  31. }
  32.  
  33. class TargetClassA: MonitorTargetType {
  34. var monitoredProperty: String
  35. init() {
  36. self.monitoredProperty = "class TargetClassA"
  37. }
  38. }
  39. class TargetClassB: MonitorTargetType {
  40. var monitoredProperty: String
  41. init() {
  42. self.monitoredProperty = "class TargetClassB"
  43. }
  44. }
  45.  
  46. class Monitor {
  47. var target: MonitorTargetType
  48. init(target: MonitorTargetType) {
  49. self.target = target
  50. print(self.target.monitoredProperty) //->class TargetClassA
  51. }
  52. }
  53. let i = Monitor(target: TargetClassA())
  54.  
  55. import Foundation
  56.  
  57. //
  58. //クラスオブジェクトを渡す
  59. //
  60. protocol MonitorTargetType {
  61. init()
  62.  
  63. var monitoredProperty: String {get}
  64. }
  65.  
  66. class TargetClassA: MonitorTargetType {
  67. var monitoredProperty: String
  68. required init() {
  69. self.monitoredProperty = "class TargetClassA"
  70. }
  71. }
  72. class TargetClassB: MonitorTargetType {
  73. var monitoredProperty: String
  74. required init() {
  75. self.monitoredProperty = "class TargetClassB"
  76. }
  77. }
  78.  
  79. class Monitor {
  80. var target: MonitorTargetType
  81. init<T: MonitorTargetType>(targetType: T.Type) {
  82. self.target = targetType.init()
  83. print(self.target.monitoredProperty) //->class TargetClassB
  84. }
  85. }
  86. let i = Monitor(targetType: TargetClassB.self)
Add Comment
Please, Sign In to add comment