SwiftUI:函数声明了一个不透明的返回类型,但其主体中的返回语句没有匹配的底层类型

Posted

技术标签:

【中文标题】SwiftUI:函数声明了一个不透明的返回类型,但其主体中的返回语句没有匹配的底层类型【英文标题】:SwiftUI: Function declares an opaque return type, but the return statements in its body do not have matching underlying types 【发布时间】:2020-10-29 08:24:19 【问题描述】:

我试图写一个这样的静态函数:

enum NavigationViewKind 
    case test1(String)
    case test2


struct NavigationViewManager 
    static func make<V: View>(_ kind: NavigationViewKind, _ contentView: @escaping () -> V) -> some View 
        switch kind 
        case .test1(let text):
            return NavigationView 
                contentView()
                    .navigationBarTitle(text, displayMode: .inline)
            
        case .test2:
            return NavigationView 
                contentView()
                    .navigationBarTitle("Initial", displayMode: .large)
            
        
    

但是我收到了这个错误:

函数声明了一个不透明的返回类型,但其主体中的返回语句没有匹配的底层类型

你能帮我理解和解决这个错误吗?

谢谢

【问题讨论】:

【参考方案1】:

在这种情况下您需要使用@ViewBuilder(并删除返回,因为返回会禁用 ViewBuilder)

struct NavigationViewManager 
    @ViewBuilder
    static func make<V: View>(_ kind: NavigationViewKind, _ contentView: @escaping () -> V) -> some View 
        switch kind 
        case .test1(let text):
            NavigationView 
                contentView()
                    .navigationBarTitle(text, displayMode: .inline)
            
        case .test2:
            NavigationView 
                contentView()
                    .navigationBarTitle("Initial", displayMode: .large)
            
        
    

【讨论】:

以上是关于SwiftUI:函数声明了一个不透明的返回类型,但其主体中的返回语句没有匹配的底层类型的主要内容,如果未能解决你的问题,请参考以下文章

错误消息:“函数声明了一个不透明的返回类型,但它的主体中没有返回语句来推断基础类型”

如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?

属性声明了一个不透明的返回类型,但没有用于推断基础类型的初始化表达式

SwiftUI Function 声明一个 Opaque 返回类型,在一个 View 中插入两个按钮?

带有常规文本的 SwiftUI 低不透明度按钮

SwiftUI - 如何脉动图像不透明度?