๊ณต์๋ฌธ์ : A type that publishes a property marked with an attribute.
@propertyWrapper struct Published<Value>
@Published ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ด ์ ํ์ ํผ๋ธ๋ฆฌ์ (publisher)๊ฐ ์์ฑ๋๋ค.
์ด ํ $์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๊ฐ์ ๋ณํ์ ์ ๊ทผํ ์ ์๋ค.
ex)
class Weather : ObservableObject {
@Published var temperature: Double
init(temperature: Double) {
self.temperature = temperature
}
}
let weather = Weather(temperature: 20)
cancellable = weather.$temperature
.sink() {
print ("Temperature now: \($0)")
}
weather.temperature = 25
// Prints:
// Temperature now: 20.0
// Temperature now: 25.0
์ ์ฝ๋ ์ฒ๋ผ ํ๋กํผํฐ๊ฐ ๋ณํ์ ๋, willSet ๋ธ๋ก์ ๊ฒ์๊ฐ ๋ฐ์ํ๋ค.
์ด ๋ง์, ์ค์ ๋ก ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ(์ค์ )๋๊ธฐ ์ ์ ์ ๊ฐ์ ๋ฐ๋๋ค๋ ๋ง์ด๋ค.
Temperature now: 20.0์ ํด๋ก์ ธ๋ฅผ ์ ์ธ ํ์ ๋ ๋ฐ๋ก ์ถ๋ ฅ๋๋ฉฐ, ๊ทธ ์ดํ ๋ณํ๊ฐ์๋ํ ์ถ๋ ฅ์ด ๋ํ๋๊ฒ ๋๋ค.
@Published๋ ํ๋กํผํฐ ๋ํผ๋ก ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์๋์ผ๋ก ์๋ ค์ฃผ๋ observable object๋ฅผ ๋ง๋ค ์ ์๋ค.
SiwftUI๋ ์ด๋ฌํ ๋ณ๊ฒฝ์ฌํญ์ ๊ด์ฐฐํ๊ณ ๋ชจ๋ํฐ๋งํ๋ View์ body์์ฑ์ ๋ค์ ํธ์ถํด ์ค๋ค.
ํ๋ง๋๋ก @Published๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ ๋ ๋๋ง๋ค ํด๋น ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ View๋ค์ ๋ค์ ๋ก๋ ์์ผ ์ค๋ค๋ ๋ง์ด๋ค.
์๋ฅผ ๋ค์ด๋ณด์,
class Test: ObservableObject {
var testNumArray = [String]()
}
์์ ์์๋ ๊ด์ฐฐ ๊ฐ๋ฅํ๋๋ก ํ๋กํ ์ฝ์ ์ฌ์ฉํด ์ฃผ์ด์ SwiftUI๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ํด ์ฃผ๋๋ก ํ๋ค.
ํ์ง๋ง ํ๋กํผํฐ์๋ ์๋ฌด๋ฐ ํ๋กํผํฐ ๋ํผ๊ฐ ์ ์ธ ๋์ด ์์ง ์๊ธฐ์ ๋ณ๊ฒฝ์ ์์ ์์ฌ๋ก ํ ์ ์์ง๋ง, ๋ณ๊ฒฝ ์ฌํญ์ ์๋ ค์ฃผ๊ฑฐ๋ ํ์ง ์๋๋ค.
์ด ๋ @Published๋ฅผ ์ฌ์ฉ ํ์ฌ ์ด ์ ์ ๋ณด์ํ ์ ์๋ค.
class Test: ObservableObject {
@Published var testNumArray = [String]()
}
์ ์ฝ๋๋ก ๋ฐ๊ฟ์ ์์ฑํ๋ค๋ฉด @Published ์์ฑ ๋ํผ๋ ํญ๋ชฉ์ willSet ์์ฑ ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด observer์๊ฒ ์๋์ผ๋ก ์ ์ก ๋๋ค.
์ด ๋ง์ ์ฆ, testNummArray๊ฐ ๋ณ๊ฒฝ ๋์์ ๊ฒฝ์ฐ ํด๋น ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ทฐ๋ค์ ๋ณ๊ฒฝํ ๊ฐ์ ๋ํ์ฌ ์๋์ผ๋ก ๋ฆฌ๋ก๋ ๋๋ค๋ ๋ง์ด๋ค.