SwiftUI中如何访问函数内部变量并在结构体body中使用
解决方案
核心问题为当前testFunc是无返回值函数,内部定义的tester属于仅在函数作用域内生效的局部变量,外部无法直接访问。可根据你的实际使用场景选择对应实现方案:
方案1:无需后续修改数组,直接让函数返回结果
如果你仅需要拿到洗牌后的数组做展示,不需要后续修改数组同步UI,直接给函数添加返回值即可,不需要用到绑定:
struct ContentView: View { var body: some View { let shuffledArray = testFunc() // 示例:用List展示洗牌后的数组元素 List(shuffledArray, id: \.self) { element in Text(element) } } // 给函数添加[String]返回类型,返回处理后的数组 func testFunc() -> [String] { return ["a", "b", "c"].shuffled() } }
方案2:需要后续修改数组并同步刷新UI
如果你后续需要对数组做重新洗牌、增删元素等操作,且要求修改后UI自动刷新,使用@State属性包装器存储数组即可,无需绑定:
struct ContentView: View { // @State修饰的属性会被SwiftUI托管,修改时自动触发UI刷新 @State private var shuffledArray: [String] = [] var body: some View { VStack { List(shuffledArray, id: \.self) { element in Text(element) } // 示例:点击按钮重新洗牌 Button("重新洗牌") { testFunc() } } .onAppear { // 页面首次加载时执行一次洗牌 testFunc() } } func testFunc() { // 直接修改@State修饰的属性即可触发UI更新 shuffledArray = ["a", "b", "c"].shuffled() } }
关于绑定的说明
@Binding的适用场景是父子视图之间双向同步数据,比如你需要把数组传给子视图,且子视图修改数组时需要同步更新父视图的数据源,这种场景才需要用到绑定。如果仅在当前ContentView内部使用数组,绑定完全不是最优解,反而会增加冗余逻辑。
内容的提问来源于stack exchange,提问作者imjonu
相关产品推荐
相关产品推荐

