Swiftui:使用PreferenceKey将内层结构值往外传

  • 1、自定义PreferenceKey
struct CustomTiltePreferenceKey: PreferenceKey {
	
	static var defaultValue: String = ""
	
	static func reduce(value: inout String, nextValue: () -> String) {
		value = nextValue()
	}
}
  • 2、扩展View添加方法,方便使用
extension View {
	func customTitle(_ text: String) -> some View {
			preference(key: CustomTiltePreferenceKey.self, value: text)
	}
}
  • 3、页面结构和使用例子
//内层结构使用preference将值传送到外部
struct SecondaryScreen: View {
	let text: String
	@State private var newValue: String = ""
	
	var body: some View {
		Text(text)
			.onAppear(perform: getDataFromDatabase)
			.customTitle(newValue)
	}
	
	func getDataFromDatabase() {
		// download fake data
		DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
			self.newValue = "New Value From DB"
		}
	}
}

//使用例子
struct PreferenceKeyBootCamp: View {
	// MARK: -  PROPERTY
	@State  private var text: String = "Hellow world!"
	// MARK: -  BODY
	var body: some View {
		NavigationView {
			VStack {
				SecondaryScreen(text: text)
					.navigationTitle("Navigation Title")
					
			} //: VSTACK
		} //: NAVIGATION
		.onPreferenceChange(CustomTiltePreferenceKey.self) { value in
			self.text = value
		}
	}
}

  • 4、效果图
    请添加图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值