我正在尝试NavBar使用一些可选的构建自定义Views,例如搜索栏(但仅当视图需要显示它时)。
基本上,我需要在视图中传递一些@State属性@Binding。但我也需要它们作为Optional参数。
下面是一个例子:
struct NavBar: View {
var isSearchable: Bool?
@Binding var searchTxt: String
@Binding var searchIsOn: Bool
var navBarTitle: String
var navBarAction: (() -> Void)?
var navBarImage: String?
init(navBarTitle: String, navBarAction: (() -> Void)? = nil, navBarImage: String? = nil, isSearchable: Bool? = false, searchTxt: (Binding<String>)?, searchIsOn : (Binding<Bool>)?) {
self.navBarTitle = navBarTitle
if(navBarAction != nil) {
self.navBarAction = navBarAction!
}
if(navBarImage != nil) {
self.navBarImage = navBarImage!
} …Run Code Online (Sandbox Code Playgroud) 我正在试验来自https://alanquatermain.me/programming/swiftui/2019-11-15-CoreData-and-bindings/ 的代码
我的目标是让 DatePicker 绑定到 Binding< Date? > 允许 nil 值而不是初始化 Date(); 这很有用,如果您的核心数据模型实体中有 Date 属性接受 nil 作为有效值。
这是我的快速游乐场代码:
extension Binding {
init<T>(isNotNil source: Binding<T?>, defaultValue: T) where Value == Bool {
self.init(get: { source.wrappedValue != nil },
set: { source.wrappedValue = $0 ? defaultValue : nil})
}
}
struct LiveView: View {
@State private var testDate: Date? = nil
var body: some View {
VStack {
Text("abc")
Toggle("Has Due Date",
isOn: Binding(isNotNil: $testDate, defaultValue: Date()))
if testDate != …Run Code Online (Sandbox Code Playgroud)