swift - 是否可以在新的 init 中实现对 Swift (SwiftUI) 类的通用约束?
问题描述
虽然下面的示例很简单,但它无法编译,因为 Swift 无法确定 Text() 视图是泛型约束所需的内容类型(错误“无法将'Text'类型的值转换为闭包结果类型'Content'” )。
有没有办法让 init 可以满足通用约束?
extension VStack {
init() {
self.init(spacing: 0) {
Text("Test")
}
}
}
完整的示例,在更新了 George_E 的回复后,如下所示。
extension VStack {
init<InnerContent: View>(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil, @ViewBuilder content: @escaping (GeometryProxy) -> InnerContent) where Content == GeometryReader<InnerContent> {
self.init(alignment: alignment, spacing: spacing) {
GeometryReader { proxy in
content(proxy)
}
}
}
}
解决方案
您可以where
在 init 中包含一个子句:
extension VStack {
init() where Content == Text {
self.init(spacing: 0) {
Text("Test")
}
}
}
或者:
extension VStack where Content == Text {
init() {
self.init(spacing: 0) {
Text("Test")
}
}
}
推荐阅读
- bash - 根据文件中定义的次数打印变量(bash)
- python - 将属性数据存储在 scipy 稀疏矩阵中的最佳方法?
- react-native - 执行 UI 块时引发异常:- [ABI27_0_0RCTview updateContentOffsetINeeded]:
- julia - 使用/分发预编译文件
- java - 使用 javacv 1.4.2 在框架中打开图像
- ibm-cloud-infrastructure - 如何检查软层数据类型中的键
- javascript - 将画布数据保存到浏览器
- centos - 如何使用密码安装 vncserver?
- python - Python检查网站是否存在以获取网站列表
- nginx - Nginx 子域:重定向到错误的目录