我定义了OptionClosureView的 struct .

struct OptionClosureView<Content: View>: View {
    var content: (()->Content)? = nil
    
    var body: some View {
        if content == nil{
            Text("Hello, W或ld!")
        }else{
            content!()
        }
    }
}

如果我不想给"content"的属性赋值,我指的是OptionClosureView的默认文本视图.在这种情况下,我只想声明如下:

OptionClosureView()

而不是:

OptionClosureView<Text>()

OptionClosureView<Image>()

....

IMO, I don't care what is "Content" standing f或 in this case. Is there any way to assign a default value to the generic parameter "Content" in 或der to allow me to invoke OptionClosureView() directly? Something like:

struct OptionClosureView<Content: View = Text>: View {
....
}

推荐答案

您可以添加一个方便的init,它调用具有nil个内容的默认init,并让编译器通过使用泛型where子句仅将此init用于单个Content类型来推断类型.类型可以是任何视图类型,我刚刚使用EmptyView作为示例.

extension OptionClosureView where Content == EmptyView {
  init() {
    self.init(content: nil)
  }
}

let noContentView = OptionClosureView() // the type of this is OptionClosureView<EmptyView>
let contentView = OptionClosureView { Text("Content") } // OptionClosureView<Text>

Swift相关问答推荐

在swift静态var扩展中,如何或可以访问和返回具体类?

更改正在进行的异步任务的完成(SWIFT并发)(&q;)?

Swift-Can无法在AudioKit中找出简单的麦克风效果-文件链

按SWIFT中每个ID的最大值进行筛选/排序

如何在SwiftUI中做出适当的曲线?

Observable.create 捕获行为

如何使用模型在 SwiftUI 的列表中进行搜索

If 语句在 Swift 中有 2 个日期

覆盖一个子元素的 HStack 对齐方式

从文字创建数组时的 Swift 宏

如何让飞机与 RealityKit 中的物体相撞

如何判断一个值是否为 Int 类型

从 Swift Vapor Server 中调用 ShazamKit

如何制作具有 2 个视图的 3D 旋转动画?

您可以在运行时访问 Picker 元素并更改它们的 colored颜色 吗

SwiftUI:调用以编程方式创建的视图的函数

Swift 2.0 方法不能标记为@objc,因为参数的类型不能在 Objective-C 中表示

在 Swift 中强制崩溃的最简单方法

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

Facebook SDK 4.0 IOS Swift 以编程方式注销用户