ぜのぜ

しりとりしようぜのぜのぜのぜ

@Publishedな値型のmutatingなメソッドを呼ぶとprojectedValueにイベントが流れる

実際に変更されたかは関係ないの、そうか…という感じ。

--- 追記

そもそもdidSetが呼ばれていた。イベントが流れるのもそれはそうという感じ。

実際に変更されたかは関係なくdidSetが呼ばれるの、そうか…という感じ になるだけだけど。

--- 追記ここまで

import Combine

enum SomeEnum {
    case some

    mutating func mutatingFunc() {}

    func nonmutatingFun() {}
}

struct SomeStruct {
    mutating func mutatingFunc() {}

    func nonmutatingFunc() {}
}

class SomeClass {
    @Published
    var someEnum = SomeEnum.some

    @Published
    var someStruct = SomeStruct()

    init() {
        print("""
        ---
        enum
        ---
        """)
        var cancellable = $someEnum.sink { print("sink:", $0) }

        print("mutatingFunc")
        someEnum.mutatingFunc()

        print("nonmutatingFunc")
        someEnum.nonmutatingFun()

        print("""
        ---
        struct
        ---
        """)
        cancellable = $someStruct.sink { print("sink:", $0) }

        print("mutatingFunc")
        someStruct.mutatingFunc()

        print("nonmutatingFunc")
        someStruct.nonmutatingFunc()
    }
}

SomeClass()

// => ---
// => enum
// => ---
// => sink: some // これはsinkした時点で流れるやつ
// => mutatingFunc
// => sink: some
// => nonmutatingFunc
// => ---
// => struct
// => ---
// => sink: SomeStruct() // これはsinkした時点で流れるやつ
// => mutatingFunc
// => sink: SomeStruct()
// => nonmutatingFunc