Compare class & struct when using didSet/willSet

didSet and willSet are a pair of stored property observers for class or struct. How about the stored property itself is a class or struct? Does changing a stored property of didSet/willSet bound story property triggers didSet/willSet? Clear example:

class Cat {  
    var name: String!
}

struct Dog {  
    var name: String!
}

struct Host {  
    var cat: Cat! {
        didSet {
            print("Set a 😼")
        }
    }

    var dog: Dog! {
        didSet {
            print("Set a 🐶")
        }
    }
}

var host = Host()  
host.cat = Cat() //Set a 😼  
host.dog = Dog() // Set a 🐶

host.cat.name = "Cat"  
host.dog.name = "Dog" // Set a 🐶

Quick wrap-up, updating any property of dog (struct) is actually creating a new dog instance and assigning it to Host, because it is a constant stored property of Host. For cat (class) in Host, it's mutable so that didSet wasn't triggered.