You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI的ContentView中将JS或任意函数的返回值显示到iPhone屏幕

代码调整方案

你原有代码存在几个语法和逻辑错误,调整后可直接运行实现需求,完整可运行代码如下:

//  ContentView.swift
//  Shared

import Foundation
import SwiftUI
import JavaScriptCore

// 类名遵循Swift规范大写,修正未初始化属性问题
class JSRunner {
    func doJS(text: String) -> String {
        let jsSource = "var testFunct = function(message) { return \"Test Message: \" + message;}"
        guard let context = JSContext() else {
            return "JS上下文初始化失败"
        }
        context.evaluateScript(jsSource)
        guard let testFunction = context.objectForKeyedSubscript("testFunct"),
              let result = testFunction.call(withArguments: [text]).toString() else {
            return "JS函数调用失败"
        }
        return result
    }
}

struct ContentView: View {
    // 初始化JS运行器,提前调用方法获取展示文本
    private let jsRunner = JSRunner()
    private let showText: String
    
    init() {
        showText = jsRunner.doJS(text: "Hello world")
    }
    
    var body: some View {
        Text(showText)
            .font(.body)
            .fontWeight(.black)
            .foregroundColor(Color.red)
            .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

主要调整点

  • 修复了类属性未初始化的报错,移除了无用的result存储属性
  • 删除了不存在的lol()调用,在ContentView的初始化方法中执行JS函数获取结果
  • 替换了强制解包的写法,增加异常分支的返回值,避免运行时崩溃
  • 调整命名符合Swift官方编码规范,提升可读性

运行后屏幕会显示红色的Test Message: Hello world文本,符合预期效果。

内容的提问来源于stack exchange,提问作者Konstantin Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:09:03