2017-05-09 6 views
0

私は3のカウントを期待していましたが0を返しました。私は9時間まっすぐにコーディングしています。値型の変数を格納していないHashable構造体Array <class objects>

私はスウィフトの理解に穴があるかもしれません。どんな助けもありがたい。

struct Service { 

    enum Category: String { 

    case hospital, pharmacy, surgery 

    var title: String { 
     switch self { 
     case .hospital: 
     return "Hospitals" 
     case .pharmacy: 
     return "Pharmacies" 
     case .surgery: 
     return "Surgeries" 
     } 
    } 

    } 

    let title: String 
    let category: Category 
    var fetched: [Annotation] = [] 

} 

extension Service { 

    init(category: Category) { 
    self.title = category.title 
    self.category = category 
    } 

} 

extension Service: Equatable { 

    static func ==(lhs: Service, rhs: Service) -> Bool { 
    return lhs.category == rhs.category 
    } 

} 

extension Service: Hashable { 

    var hashValue: Int { 
    return category.hashValue 
    } 

} 

class Annotation: NSObject { 

    let name: String 

    init(name: String) { 
    self.name = name 
    } 

} 

class Services { 

    var currentService: Service { 
    didSet { 
     if currentService != oldValue { 
     if let previousService = previousServices[currentService.category.rawValue] { 
      currentService = previousService 
     } else { 
      previousServices[currentService.category.rawValue] = currentService 
     } 
     } 
    } 
    } 

    private var previousServices: [String : Service] = [:] 

    init() { 
    currentService = Service(category: .hospital) 
    } 

} 

let services = Services() 
services.currentService.fetched = [Annotation(name: "1"),Annotation(name: "2"),Annotation(name: "3")] 
services.currentService = Service(category: .surgery) 
services.currentService.fetched = [Annotation(name: "4"),Annotation(name: "5")] 
services.currentService = Service(category: .hospital) 
print(services.currentService.fetched.count) 
+0

新しい '' 'サービス(カテゴリ:.hospital)' ''をインスタンス化しています。現在のサービスを新しいサービスにしたいということです。サービスを切り替える場合は、別の方法で行う必要があります。 – iWheelBuy

答えて

0

他のケースのためのdidSet内の行は次のようになります。

previousServices[oldValue.category.rawValue] = oldValue 

そうでない場合は、新しい値を格納しています。

+0

ありがとうございます。私は今眠るべきです。 –

関連する問題