Лучший способ сравнить два значения любого типа в Swift - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть класс, который имеет property value типа Any Я реализовал метод didSet для значения, подобного этому

didSet {
  if oldValue == nil && self.value != nil {
    // do something
  }
  else {
    if let val = self.value as? AnyHashable, let oldVal = oldValue as? AnyHashable {
      if val != oldVal {
        // do something 
      }
    }
  }
}

Мое значение типа optional, поэтому я хочупроверьте случай nil.Есть ли лучший способ сделать это, я не хочу приводить к Anyhashasble Я хочу, чтобы они были приведены к классу, к которому они принадлежат.

1 Ответ

0 голосов
/ 23 февраля 2019

Что ж, если вы предполагаете, что это свойство всегда и если только всегда, тип ссылки, то вы можете попробовать использовать AnyObject вместо Any и использовать оператор ===, чтобы проверить, указывают ли указатели натот же объект.

Примерно так:

class Test {

    var object: AnyObject? {
        didSet {
            if oldValue === object {
                debugPrint("Old object")
            } else {
                debugPrint("New object")
            }
        }
    }
}

class SomeClass {}

let test = Test()
let s = SomeClass()

test.object = s
test.object = s
test.object = SomeClass()

Результат будет:

"New object" - потому что предыдущее значение было nil

"Old object" - потому что мы присвоили один и тот же s

"New object" - потому что мы присвоили совершенно новый объект

...