您好,登錄后才能下訂單哦!
這篇文章主要介紹SwiftUI中state和Binding的區(qū)別有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
@state 綁定值的狀態(tài),其屬性的修飾官方推薦使用private.上代碼(ps:這里沒用private 進行修飾,是為了演示區(qū)別)
import SwiftUI
struct FilterView: View { // @Binding var isFavorite: Bool @State var isFavorite = true var body: some View { Toggle(isOn: $isFavorite) { } let buttonTitle = isFavorite ? "嘔吼" : "頓頓" Text(buttonTitle) } } struct ProductView: View { var titleS: String //:不想讓外部訪問的變量 需要初始化 @State private var changeButtonTtile = true var body: some View { Button (action: { changeButtonTtile.toggle() }) { let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦" Text(buttonTitle) FilterView(isFavorite: changeButtonTtile) } } }
這里我們看到 @State var isFavorite = true通過state 進行修飾.這個時候我們點擊FilterView的開關(guān) 我們只能刷新當前FilterView的界面.注意這里:FilterView(isFavorite: changeButtonTtile) 初始化傳入的是changeButtonTtile的value,也就實際值.
下面我們把State注釋掉 ,打開@Bingding 那一行
import SwiftUI struct FilterView: View { @Binding var isFavorite: Bool // @State var isFavorite = true var body: some View { Toggle(isOn: $isFavorite) { } let buttonTitle = isFavorite ? "嘔吼" : "頓頓" Text(buttonTitle) } } struct ProductView: View { var titleS: String //:不想讓外部訪問的變量 需要初始化 @State private var changeButtonTtile = true var body: some View { Button (action: { changeButtonTtile.toggle() }) { let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦" Text(buttonTitle) FilterView(isFavorite: $changeButtonTtile) //:注意這里的取值 變成了$ } } }
這里我們運行代碼,點擊開關(guān),你發(fā)現(xiàn)了什么??.ProductView 的UI 也發(fā)生了變化.這個時候FilterView 傳入的是changeBtnTitle的引用,而不是值.這樣你在子視圖改變@Binding修飾的值,父視圖也會跟著刷新.
使用小結(jié)
當自定義視圖的數(shù)據(jù)需要外部傳入的時候, 使用普通的屬性
當自定義的視圖需要通過數(shù)據(jù)變化更新視圖時, 對普通屬性加上@State修飾
當自定義的視圖需要將視圖的變化表現(xiàn)在數(shù)據(jù)的變化時,對普通屬性加上@Binding修飾, @Binding 包含了@State的功能, 但一般不會去對@Binding屬性做修改
以上是“SwiftUI中state和Binding的區(qū)別有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。