You need to enable JavaScript to run this app. Swift开发问题:Text组件无法显示变量valueWeWantToGrab的实际取值
优惠活动
大模型
产品
解决方案
定价
更多

Swift开发问题:Text组件无法显示变量valueWeWantToGrab的实际取值

问题根因
  • 变量作用域错误:网络请求闭包内重新声明了局部变量valueWeWantToGrab,赋值操作未作用到@State修饰的全局属性,Text绑定的属性值始终为空。
  • 线程不匹配:URLSession回调默认运行在后台线程,SwiftUI要求UI状态更新必须在主线程执行,后台修改@State属性不会触发视图刷新。
  • 请求未启动:创建dataTask实例后未调用resume()方法,请求不会主动执行。
  • 请求位置错误:body是视图渲染计算属性,每次刷新都会重新执行,写在body中的网络请求会被反复触发,需放到onAppear生命周期方法中执行。
  • 协议错误:Instagram已强制使用HTTPS,你填写的HTTP开头的地址会被苹果ATS安全策略拦截。
修复代码
struct ContentView: View {
    @State var valueWeWantToGrab = ""
    
    var body: some View {
        Text(valueWeWantToGrab)
            .onAppear(perform: fetchFollowerCount)
    }
    
    private func fetchFollowerCount() {
        let baseUrl = "https://www.instagram.com/"
        let username = "替换为目标账号名"
        guard let url = URL(string: baseUrl + username) else {
            print("非法URL")
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { data, _, error in
            guard let data = data, error == nil else {
                print("请求失败:\(error?.localizedDescription ?? "未知错误")")
                return
            }
            guard let htmlString = String(data: data, encoding: .utf8) else {
                print("数据转字符串失败")
                return
            }
            
            let leftSideString = "edge_followed_by\":{\"count\":"
            let rightSideString = "},\"followed_by_viewer"
            
            guard let leftRange = htmlString.range(of: leftSideString),
                  let rightRange = htmlString.range(of: rightSideString) else {
                print("未匹配到粉丝数字段,可能是反爬验证页面")
                return
            }
            
            let followerCount = htmlString[leftRange.upperBound..<rightRange.lowerBound]
            print(followerCount)
            
            DispatchQueue.main.async {
                self.valueWeWantToGrab = String(followerCount)
            }
        }
        task.resume()
    }
}
补充说明

Instagram网页端存在反爬机制,未登录状态下请求大概率会返回人机验证页面,正则匹配的方式稳定性极低,建议使用官方开放接口获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:54:01