我正在尝试构建一个自定义的< code>NavBar,带有一些可选的< code >视图,比如searchbar(但前提是视图需要显示它)。
基本上,我需要在视图中传递一些带有@绑定的
参数。@State
属性。但我也需要它们是可选的
下面是一个示例:
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!
}
self.isSearchable = isSearchable
self._searchTxt = (searchTxt != nil) ? (searchTxt!).binding : nil
self._searchIsOn = (searchIsOn != nil) ? (searchIsOn!).binding : nil
assert((navBarAction != nil) ? navBarImage != nil : true)
assert((isSearchable! == true) ? (searchTxt!.value.count > 0) : true)
}
// var body ....
}
我所说的属性是searchIsOn
和searchTxt
。但是执行赋值self._searchTxt = searchTxt
或 self._searchIsOn = searchIsOn
会引发编译错误:
无法将类型“绑定?”的值分配给类型“绑定”
你知道我该如何解决这个问题吗?
还是有更好的方法来做我想做的事?
我有一个< code > UIViewControllerRepresentable ,以便使用< code > UIImagePickerController 。如果你曾经使用过这个图像拾取器,你知道你需要图像返回到一个可选的。因此,在我的< code>ContentView中,我声明:
@State var uiImage: UIImage?
...
if uiImage != nil {
Image(uiImage: $uiImage)
} else {
Rectangle()
}
在我的ImagePicker
(这是我的SwiftUI
视图)中,我有:
@Binding var uiImage: UIImage?
很管用。
(if语句几乎是伪代码,因为我实际上使用的是MTKView
,以及CIImage
,但你的意思是-你可以像在其他地方一样使用可选的。)
你要的是一个字符串的可选绑定,不是可选字符串的绑定。我不认为您可以通过使用@Binding注释来实现这一点。
但是,您不需要使用注释。您可以将变量声明为绑定:
你
@Binding var searchTxt: String?
然后转向这个
var searchTxt: Binding<String?>
但是通过这种方式,语法允许您放置 ?随心所欲。因此,如果您将其移动到末尾,在绑定的结束标记之后,您将拥有所需的内容。
var searchTxt: Binding<String>?
如果要访问绑定中的字符串,必须使用wrappedValue属性。
Text(searchTxt!.wrappedValue)
@Binding var searchTxt: String?
init(searchTxt: Binding<String?>?) {
self._searchTxt = searchTxt ?? Binding.constant(nil)
}
更新:我更喜欢这个TextField(“,text:$text??“默认值”)
https://stackoverflow.com/a/61002589/4728060
func ??<T>(lhs: Binding<Optional<T>>, rhs: T) -> Binding<T> {
Binding(
get: { lhs.wrappedValue ?? rhs },
set: { lhs.wrappedValue = $0 }
)
}
这是我的可选装订 所以现在当我尝试调用这个构造函数时: 我得到了这个错误: 绑定
我有一个视图,有时用于浏览数据,有时用于选择数据。 当用于浏览时,它由NavigationLink呈现。 当用于选择数据时,它以模式表的形式显示,并通过将绑定布尔值isPresented设置为false来关闭,因此我可以使用表函数onDismiss。 然而,在浏览模式下,我需要一种方法来跳过初始化isPresent绑定布尔值。正确的方法是view init()上的可选参数,但我尝试的所有内容都会抛
我想在 init 方法中默认 returnGroup 为 nil,但是我收到以下错误 Nil 默认参数值无法转换为类型 'Binding' 想知道如何将绑定设置为 nil ?
如何拥有绑定类型的可选参数
(macOS 10.15 beta 和 Xcode 11 beta 5) 我正在使用的SwiftUI教程(https://www.raywenderlich.com/3715234-swiftui-getting-started#toc-anchor-005)包括以下视图: 该视图是在与另一个视图相同的文件中声明的,可以作为该视图的组件进行预览。 正如在教程中使用的那样,它可以工作,但我后来将视图
可以为url使用可选参数吗?例如,如果未传递参数,则路径将匹配相同的组件; 在实现它的时候,我需要声明两个路由和来匹配同一个组件。