Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助维护Swift环境对象

需要帮助维护Swift环境对象
EN

Stack Overflow用户
提问于 2022-01-11 11:35:04
回答 1查看 61关注 0票数 0

尝试使用SwiftUI将ViewController视图放置到ViewController中,但收到以下错误:

未发现ObservableObject型UIStateModel。作为此视图的祖先,可能缺少用于View.environmentObject(_:)的UIStateModel。

所有的帮助都很感激,我被困住了。

ViewController.swift

代码语言:javascript
运行
AI代码解释
复制
class ViewController: UIViewController {
    @EnvironmentObject var UIModel: UIStateModel
    var uiState: UIStateModel = UIStateModel()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addCarousel()
    }
    
    func addCarousel(){
        let snapC : SnapCarousel
        let contentView : UIHostingController<SnapCarousel>
        uiState = UIStateModel()
        snapC = SnapCarousel( UIState: uiState )
        contentView = UIHostingController(rootView: snapC)
        addChild(contentView)
        view.addSubview(contentView.view)
        contentView.didMove(toParent: self)
    }
    
}

Carousel.swift

代码语言:javascript
运行
AI代码解释
复制
struct SnapCarousel: View {
    var UIState: UIStateModel
    //Carousel instantiation 
}

struct Card: Decodable, Hashable, Identifiable {
    //code
}

public class UIStateModel: ObservableObject {
    @Published var activeCard: Int = 0
    @Published var screenDrag: Float = 0.0
}

struct Carousel<Items : View> : View {
    @EnvironmentObject var UIState: UIStateModel
    //card management
}

struct Canvas<Content : View> : View {
// view manager 
}

struct Item<Content: View>: View {
    @EnvironmentObject var UIState: UIStateModel
   //code for card view
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-11 12:00:01

您需要将UIStateModel注册为@EnvironmentObject,以便可以将其自动注入子视图中。

首先,更新SnapCarousel以保存environmentObject:

代码语言:javascript
运行
AI代码解释
复制
struct SnapCarousel: View {
    @EnvironmentObject var UIState: UIStateModel
    //Carousel instantiation 
}

若要将模型注册为环境对象,当使用SnapCarousel注册为:

代码语言:javascript
运行
AI代码解释
复制
let snapC = SnapCarousel()
snapC.environmentObject(uiState)

如果不需要引用uiState,则可以将整个过程简化为:

代码语言:javascript
运行
AI代码解释
复制
class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    addCarousel()
  }

  func addCarousel() {
    let controller = UIHostingController(rootView: SnapCarousel().environmentObject(UIStateModel()))
    addChild(controller)
    view.addSubview(controller.view)
    controller.didMove(toParent: self)
    
    // add some constraints to fill the parent view
    NSLayoutConstraint.activate([
      controller.view.widthAnchor.constraint(equalTo: view.widthAnchor),
      controller.view.heightAnchor.constraint(equalTo: view.heightAnchor),
      controller.view.centerXAnchor.constraint(equalTo: view.centerXAnchor),
      controller.view.centerYAnchor.constraint(equalTo: view.centerYAnchor)
    ])
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70672458

复制
相关文章
ScintillaNET 需要帮助
Scintilla是一个免费的源代码编辑控件,它完全开放源代码,并且提供一个license允许用户自由地将它用在开源软件或是商业软件中。作为源代码编辑控件,我们能在普通的的文本编辑控件中能看到的功能,Scintilla都完全能够实现,而且,它还能够提供很多编辑和调试源代码时有用的特殊功能。包括语法高亮显示,错误指示,代码自动完成以及代码提示等。而且在左边的空白处(margin),可以显示调试代码中非常有用的显示断点以及显示当前运行行等功能。而且,自定义风格的功能比其他大部分编辑器控件都开放,它允许用户自定
张善友
2018/01/22
1.6K0
Swift 数组对象排序
首先我们初始化一个数组 var personList: [Person] = [] func setupData() -> Void { for _ in 0...20 { let index = Int(arc4random() % 100) let persion = Person(); persion.name = ("name\(index)") persio
赵哥窟
2020/07/28
1.5K0
使用 Codable 归档 Swift 对象
UserDefaults非常适合存储简单的设置,例如整数和布尔值,但是当涉及复杂数据时——例如自定义Swift类型——我们需要做更多的工作。
Swift社区
2021/11/26
1.3K0
使用Codable归档Swift对象
UserDefaults非常适合存储简单的设置,例如整数和布尔值,但是当涉及复杂数据时——例如自定义Swift类型——我们需要做更多的工作。
韦弦zhy
2020/04/24
2.1K0
使用Codable归档Swift对象
swift 对象储存地址分析
版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/79216805
星宇大前端
2019/01/15
1.7K0
在Swift中标识对象
我们经常会遇到这样的情况:我们需要找到一种方法,根据一些身份的概念来存储对象。无论是在缓存中,还是在磁盘上存储对象的表示,或者简单地使用字典——我们经常需要找到方法来唯一地识别我们所处理的对象。
韦弦zhy
2022/03/30
7720
Swift 面向对象解析(二)
 接着上面一篇说的内容: 一 继承:      苹果继承与水果,苹果是水果的子类,则苹果是一种特殊的水果;这就是继承的关系,这个我们学OC的时候相信也都理解了,就不再描述定义了,下面的就叫继承: class ZXMessageCell: UITableViewCell { // 自定义的cell继承与UITableviewCell }      继承了父类,你也就能使用父类的属性方法,这些我们学OC的时候也都清楚。看下面几点,      1:重写父类的方法      2:重写父类的属
Mr.RisingSun
2018/01/15
1K0
Swift 面向对象解析(一)
面向对象总体概括: Swift 不仅能够面向过程编程,也能够面向对象编程(OOP)。面向对象其实就是“以对象为核心”,把我们的客观世界想着是由一个个对象组成的,面向对象编程则为对象提供了属性和方法,属性就是为了描述对象的一些状态,方法则是告诉你对象该做什么。面向对象和核心就是“类”和“对象”!在我刚接触编程的时候,其实我也很容易把这东西混淆了,你要也是刚接触编程,能帮到你的,我觉得反而是时间。你要实在是有点难理解,就别去钻牛角尖,也许明天因为某个东西你就会恍然大悟。超喜欢那种感觉!         面
Mr.RisingSun
2018/01/15
1.8K0
Swift底层-对象&结构&属性
pushq %rbp //很明显,往下读pushq movl 参数入栈和传递
Wilbur-L
2021/03/07
1.1K0
Swift底层-对象&结构&属性
Swift进阶七——面向对象编程
面向对象编程(OOP,Object Oriented Programing)有三大特性:
拉维
2021/02/15
1K0
Swift3.0 - 对象的标识
怎么获取类的标识 class Student { } let x = Student() let y = x print(ObjectIdentifier(x) == ObjectIdentifier(y)) print(x === y) let z = Student() print(ObjectIdentifier(x) == ObjectIdentifier(z)) print(x === z) 创建对象的时候,会给对象分配一个独一无二的标识
酷走天涯
2018/09/14
4390
网站运营维护中需要用到什么服务器 运营维护还需要哪些
对于市面上的很多网站来说,除了能给它开发出来之外,后期的运营维护也是非常重要的,有不少人都不知道做好一个网站之后后期应该怎样维护,那么网站运营维护中需要用到什么服务器,除此之外要想做好网站的运营维护工作,还需要注意哪些呢?
用户8715145
2021/09/17
2.3K0
网站运营维护中需要用到什么服务器 运营维护还需要哪些
Swift — 面向对象中类和对象的属性
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115585.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
2.8K0
Swift3.0 - 对象判等
实现步骤 1.对象遵守协议Equatable 2.实现协议的方法 a.第一种写法 在类内部实现 class A :Equatable{ var name:String? stat
酷走天涯
2018/09/14
4490
Swift 对象内存模型探究(一)
HandyJSON 是 Swift 处理 JSON 数据的开源库之一,类似 JOSNModel,它可以直接将 JSON 数据转化为类实例在代码中使用。 由于 Swift 是一种静态语言,没有 OC 那种灵活的 Runtime 机制,为了达到类似 JSONModel 的效果,HandyJSON 另辟蹊径,绕过对 Runtime 的依赖,直接操作实例的内存对实例属性进行赋值,从而得到一个完全初始化完成的实例。 本文将通过探究 Swift 对象内存模型机制,简单介绍 HandyJSON 实现原理. 内存分配 St
腾讯Bugly
2018/03/23
2.1K0
Swift3.0 - 对象和类
1.对象中的所有变量或者常量在定义时如果不初始化,在对象初始化的时候,必须初始化,这个是swift安全性考虑,可选类型没有强制性要求初始化,因为系统默认给可选类型初始化为nil
酷走天涯
2018/09/14
4280
远程维护需要“千里眼”
    说一点小故事,业务发展中心为客户部署了一套FTS软件,这是一个BS软件,但程序在客户的服务器上,我们需要不定期的维护这个软件,如发送一些更新文件给客户方的某个负责人,然后由他覆盖程序文件,完成软件的更新。由于客户在江西,每次都需要华很长时间和客户方的这个负责人取得联系,所以软件更新不是很方便。     前两天客户说软件又出现了C盘无法访问的问题,导致网页访问出错。这个问题出现的原因是软件运行时在C盘根目录下面记录那些出错的SQL语句,便于我们跟踪调试,但是客户机器不允许其它程序访问C盘,所以出现
用户1177503
2018/02/26
7170
搭建可维护的 Golang 开发环境​
在《基础篇》[1]的内容中,我们聊过了如何基于 Ubuntu 22.04 搭建基础的 Linux 学习环境。接下来的文章里,我们先来聊聊如何在 Linux 环境中,快速安装配置各种可维护的语言环境。
soulteary
2023/03/05
7250
搭建可维护的 Golang 开发环境​
为什么你需要编程assignment指导帮助?
计算机编程一直都不是一个简单的领域,即使是对于那些痴迷于计算机编程的同学,乃至大神们,也很难掌握所有的理论和概念。但是,教授、讲师们不可能延长课时,让同学们有充分时间去领悟其中的精髓,甚至是精通计算机编程。 那有什么办法可以让同学们熟练掌握计算机编程呢?7*24的图书馆学习吗?当然不是!俗话说的好,“火车跑得快,全靠车头带”,同学们需要的是一名专业的工程师,在前方带领大家。
拓端
2022/10/24
4040
点击加载更多

相似问题

需要帮助设置开发环境

17

需要SQL智能环境帮助

21

需要帮助-建立前台环境

10

需要帮助开发iOS/Swift

13

需要帮助,Swift 2.0 SKSpriteNode

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档