我希望执行以下操作:
import SwiftUI
protocol CombinedView: View {
var dataForViewA: String { get }
var viewA: any View { get }
var viewB: any View { get }
}
extension CombinedView {
var viewA: Text {
Text(dataForViewA)
}
var body: some View {
VStack {
viewA
viewB
}
}
}
viewA 工作正常,因为我可以指定具体类型,但 var body 提示:
Type 'any View' cannot conform to 'View'
我不确定需要采取什么措施来解决这个问题。有什么想法吗?
预先感谢您的任何建议
最佳答案
它不是这样工作的,相反,我们需要为每个通用 View 关联类型并在扩展中进行专门化。
这是固定变体。使用 Xcode 14b3/iOS 16 进行测试
protocol CombinedView: View {
associatedtype AView: View
associatedtype BView: View
var dataForViewA: String { get }
var viewA: Self.AView { get }
var viewB: Self.BView { get }
}
extension CombinedView {
var body: some View {
VStack {
viewA
viewB
}
}
}
extension CombinedView where AView == Text {
var viewA: Text {
Text(dataForViewA)
}
}
关于swift - 令人满意的var body : some View in protocol extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73147046/