首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SwiftUI错误:“包含控制流语句的闭包不能与函数生成器‘ViewBuilder’一起使用

SwiftUI错误:“包含控制流语句的闭包不能与函数生成器‘ViewBuilder’一起使用
EN

Stack Overflow用户
提问于 2020-06-27 18:12:15
回答 2查看 32.3K关注 0票数 17

我尝试了一个SwiftUI教程,“处理用户输入”。

https://developer.apple.com/tutorials/swiftui/handling-user-input

我尝试用for而不是ForEach来实现它。但是出现了一个错误:“包含控制流语句的闭包不能与函数生成器‘ViewBuilder’一起使用。

发自:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import SwiftUI

struct LandmarkList: View {
    @State var showFavoritesOnly = true
    
    var body: some View {
        NavigationView{
            List{
                Toggle(isOn: $showFavoritesOnly){
                    Text("Show FavatiteOnly")
                }
                
                ForEach(landmarkData) { landmark in
                    if !self.showFavoritesOnly || landmark.isFavorite {
                            NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
                                LandmarkRow(landmark: landmark)
                            }
                        }
                }
            }
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}

给(我写的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import SwiftUI

struct LandmarkList: View {
    @State var showFavoritesOnly = true
    
    var body: some View {
        NavigationView{
            List{
                Toggle(isOn: $showFavoritesOnly){
                    Text("Show FavatiteOnly")
                }
                
                for landmark in landmarkData {
                    if $showFavoritesOnly || landmark.isFavorite {
                        NavigationLink(destination: LandmarkDetail(landmark: landmark)){
                            LandmarkRow(landmark: landmark)}
                        }
                }
            }
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2022-03-17 15:27:44

ForEachView确认,所以它的核心是View,就像TextField一样。ForEach关系

您不能使用普通的for-in,因为ViewBuilder不知道什么是命令式的for-循环。ViewBuilder可以分别使用buildEither(第一:)buildEither(第二:):)来理解其他控制流,如ifif-elseif let

票数 6
EN

Stack Overflow用户

发布于 2022-08-25 01:16:28

由于传递给我的视图之一的枚举缺少关联值,所以我得到了这个错误。

下面是它前后的样子:

在此之前

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Group {
    if let value = valueOrNil {
        FooView(
            bar: [
                .baz(arg1: 0, arg2: 3)
            ]
        )
    }
}

之后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Group {
    if let value = valueOrNil {
        FooView(
            bar: [
                .baz(arg1: 0, arg2: 3, arg3: 6)
            ]
        )
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62617491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文