假错误? `在初始化之前使用的变量` 在 init() 中初始化期间

2023-12-02

抱歉举了个无意义的例子。试图简化它,但仍然不明白发生了什么。以下给了我Variable 'self.greeting' used before being initialized:

struct MyView: View {
    @State var greeting: String
    var length = Measurement<UnitLength>(value: 5, unit: UnitLength.miles)
    init() {
        greeting = "Hello, World!" // Variable 'self.greeting' used before being initialized
    }
    var body: some View {
        Text(greeting)
    }
}

虽然这工作正常(var length不同;其他方面相同):

struct MyView: View {
    @State var greeting: String
    var length = 5 // now Int
    init() {
        greeting = "Hello, World!"
    }
    var body: some View {
        Text(greeting)
    }
}

另外,这是有效的(这里我删除了@State):

struct MyView: View {
    var greeting: String // @State removed
    var length = Measurement<UnitLength>(value: 5, unit: UnitLength.miles)
    init() {
        greeting = "Hello, World!"
    }
    var body: some View {
        Text(greeting)
    }
}
  • 如果编译器要我初始化greeting before init()那会是哪里?preinit()?
  • 为什么它认为greeting当我实际上在这里初始化它时,它是否被“使用”未初始化?
  • 有没有不同的方法来初始化 @State 变量?如果是这样,为什么当不相关的变量时它会起作用length is of Int而不是Measurement?

这段代码:

@State var greeting: String

在幕后创建一个支持变量:

let _greeting: State<String>

如果你想在 init() 中自己初始化它,你可以这样做:

init() {
    _greeting = new State<String>(initialValue: "Hello, World!")
}

但由于你有一个常量,所以像这样设置它会更简单:

@State var greeting: String = "Hello, World!"

第三个变体有效,因为没有 @State 就没有魔法。

第一个选项不起作用,因为代码被翻译为:

init() {
    self._greeting.wrappedValue = "Hello, World!"
}

and _greeting此时尚未初始化(未指定初始值)。是的,该错误具有误导性。

我不知道为什么第二个版本有效。未指定初始值,并且字符串没有隐式默认值。也许这是 iOS 15 SwiftUI 的一项新功能,应该可以使用,但由于某些限制,并非在所有情况下都可以使用?

附:有一些类似“preinit”的东西:用一些表达式分配的所有属性,例如length = Measurement<UnitLength>(...)在 init 之前运行,但无法访问它,它是内部的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

假错误? `在初始化之前使用的变量` 在 init() 中初始化期间 的相关文章

  • 扩展功能截图未捕获 iPhone 和 iPad 中的同一区域

    我正在使用扩展函数来截取 uiview 的屏幕截图 问题是结果看起来非常不同 我希望无论使用 ipad 还是 iphone 照片看起来都一样 我手动输入约束 因此我希望图像是相同的 我想使用该函数转到视图控制器的原点或中心 高度为 200
  • RealityKit – 在特定点向实体添加力量

    我有我的实体 它也有物理我用if let syntax if let scoot scooter as HasPhysics 这就像魅力一样 我可以通过使用让用户点击UITapGestureRecognizer这只是我想使用的第一次迭代sw
  • Swift 2.1- tabBarController!.selectedIndex 返回大整数

    我需要把tabBarController selectedIndex常量内的数字 我期望一个介于 0 和 3 之间的数字 具体取决于我选择的选项卡 但我得到的数字如下2147483647 有什么想法吗 代码是 let selectedTab
  • 在 iOS 上将 SwiftUI 视图转换为 PDF

    我用 SwiftUI 画了一些漂亮的图表 因为它非常简单且容易做 然后我想将整个 SwiftUI 视图导出为 PDF 以便其他人可以以良好的方式查看图表 SwiftUI 没有直接为此提供解决方案 Cheers Alex 经过一番思考 我想到
  • 隐藏标签栏并删除空格

    有没有办法隐藏选项卡栏并删除剩余的空间 大约 50px I tried self tabBarController tabBar hidden true self extendedLayoutIncludesOpaqueBars true
  • UICollectionView 快速粘性标题

    我正在尝试创建一个粘性补充标题 它始终保持在顶部并且不会响应滚动事件 到目前为止 我发现的解决方案仍然对弹跳滚动做出反应 并使用自定义 flowLayout 进行修复 这也可能是我的问题的修复 我想要这种方式的原因是标头在其他地方使用并且应
  • 如何在 UIAlertController 中的 UITextField 之后插入 UILabel

    我有一个UIAlertController of alert消息文本的样式 我已经插入了一个UITextFiled在其中与addTextField 现在我想要在它下面有一串文本 我想我需要一个UILabel但我该如何插入它呢 A UIAle
  • 检查 switch 语句中的可用性

    if a Enum输入添加新的case在新的操作系统版本中 如何检查可用性switch陈述 像一个Enum in StoreKit below public enum Code Int public typealias ErrorType
  • 如何防止在 macOS 中打开同一窗口的多个实例?

    我正在制作一个 Mac 菜单栏应用程序 它有一个Preferences选项 当用户点击它时 会出现一个Preferences将打开窗口 显示应用程序的所有设置 我打开Preferences窗口如 let storyboard NSStory
  • 将字符串编码为 HTML 字符串 Swift 3

    如何快速编码字符串以删除所有特殊字符并将其替换为其匹配的 html 编号 假设我有以下字符串 var mystring This is my String That s it 然后用它的html编号替换特殊字符 38 39 gt 62 但我
  • 如何通过 swift 包管理器在 swift 项目中添加 Alamofire [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在探索 SPM 现在我需要知道如何在我的项目中通过 SPM 导入 Alamofire 创建一个名为的 swift 文件Package在你
  • 在 HStack 中以正确的方式对齐两个 SwiftUI 文本视图

    我有一个包含两行的简单列表视图 每行包含两个文本视图 查看一和查看二 我想对齐每行中的最后一个标签 查看两个 以便名称标签领先对齐并保持对齐 无论字体大小如何 第一个标签 查看一个 也需要前导对齐 我尝试在第一个标签 查看一个 上设置最小框
  • 快速更改日期选择器语言

    我想更改 UIDatePicker 中月份表示的格式 我试过 self datePicker UIDatePicker self datePicker backgroundColor white self datePicker datePi
  • 防止 Realm 在更新对象时覆盖属性

    我已经在 iOS 中设置了一个 REST API 来连接领域对象 然而 我发现在我的对象中创建最喜欢的标志存在问题 我创建了一个最喜欢的布尔值 但是每次从 API 更新该对象时 它都会再次将最喜欢的值设置为默认 false 在这里 我希望这
  • Swift MKAnnotationView 旋转

    我试图在坐标更改时旋转我的自定义注释 我可以成功地更改坐标 但尝试了一切方法来旋转它 但没有成功 基本思想是有一个平面并通过旋转设置其方向 这是我的代码 import UIKit import MapKit class CustomPoin
  • Swift 1.2 和 Swift 2.0 中的字符串长度[重复]

    这个问题在这里已经有答案了 在以前版本的 Swift 中 我有以下代码 func myfunc mystr String if mystr utf16Count gt 3 使用最新版本的 Swift 1 2 我现在收到以下错误 utf16C
  • 如何显示启动图像

    我是 iOS 新手 我的 Xcode 版本是 7 2 1 我尝试使用 Swift 在 iOS9 上运行 我的问题是我对如何创建启动屏幕图像感到非常困惑 我发现有很多方法可以为不同版本的 iOS 创建启动屏幕图像 有人可以向我解释一下如何设置
  • 在 wkwebview 中启用摄像头和麦克风访问

    我有一个针对移动设备优化的网络应用程序 它利用getUserMedia访问网络摄像头和麦克风资源 我正在将这个应用程序包装在WKWebView因为我想提供原生应用程序体验 我知道 iOS 不允许通过浏览器访问相机 但是有什么方法可以使用本机
  • 变量 p 在初始化之前通过引用传递

    我有一个 Human 类 它的函数可以接受任意数量的人 并确定某人是否比这些人中的任何人年长 然后返回一个包含他 她比其年长的人的数组 func isOlderThan people Human gt Human var p Human f
  • Swift - 带循环的多个链 http 请求

    两天以来 我感觉我正在搜索整个网络来解决多个 http 请求的问题 所以我的工作流程如下所示 将图像上传到服务器 响应 XML 格式和任务 ID 使用任务 ID 向服务器发出 GET 请求 以检查该任务的状态 响应 XML 格式 其中状态可

随机推荐

  • 如何更改wpf中的图标扩展器

    有没有办法可以将扩展器的图标更改为 并以白色作为前景色 我一直在到处寻找但找不到简单的解决方案 或者更好的是 如何将扩展器图标的颜色更改为白色 我的背景是深色的 所以这就是我问的原因 您将需要创建自定义控件模板 请参阅此 CodeProje
  • 如何修复:无法推断自动强制的适当生命周期

    我再次遇到了一个我似乎无法独自解决的终生问题 编译器告诉我无法推断自动强制的适当生命周期 我尝试遵循编译器的建议并在handle request method fn handle request lt a gt self req Reque
  • 如何正确获取 WinForms Button 控件来绘制自定义文本

    我正在尝试创建一个自定义 winforms 按钮控件 该控件将允许通过旋转属性旋转按钮文本 我基本上已经让它工作了 但是它非常笨拙 我想知道执行此操作的正确方法 特别是现在文本重绘的行为很奇怪 如果控件移出屏幕 然后缓慢移回到文本上 要么变
  • 使用偏移量和 jQuery 滑块

    我正在使用 offset 和 jquery slider 我非常接近实现我的目标 但它有点偏离 我使用 animate 将其动画化到顶部 CSS 坐标 但是如果您查看 http www ryancoughlin com demos inte
  • 互斥锁的发生顺序是否与请求的顺序相同? [复制]

    这个问题在这里已经有答案了 我目前正在尝试使用创建一个非常简单的线程池std thread 为了在完成给定任务后保持线程 活动 我关联了一个std mutex与他们每一个人 原理有点像这样 Thread loop while 1 m oMu
  • 如何在Python中传递给类类型的类方法参数?

    我有一个类 想要定义一个接受相同类类型的参数的方法 如下所示 class MyClass def my method self param MyClass pass 但我有一个错误Unresolved reference MyClass 如
  • virtual关键字在函数声明中的位置

    我是否放置有什么区别virtual函数声明中的关键字位于返回值类型之前还是之后 virtual void DoSomething 0 void virtual DoSomething 0 找到了void virtual语法 同时重构一些遗留
  • 基本类型在 C++ 和 CLI 之间传递模板参数

    我有一个 C 模板类 template
  • 时区与日历混淆结果

    我最近一直在处理时区转换 对得到的结果感到非常惊讶 基本上 我想将日期从一个时区转换为另一个时区 下面是代码 转换工作正常 但我在调试时观察到的是 除非我调用 否则日期不会转换Calendar get Calendar FIELD priv
  • Python:传递变量名作为参数

    我有一个函数f x 其中创建了许多局部变量 x是与这些局部变量之一同名的字符串 我想通过更改来更改此局部变量x 执行此操作的干净方法是什么 目前我正在使用很多if elif声明 一些虚拟代码来代表我的问题 def f x a 1 2 3 b
  • 单色灰度图像,获取像素强度

    我试图导出单色 灰度 图像中特定像素的强度值 我有一些伪代码 但到目前为止我还无法实现真正 有效的东西 Retrieve the intensity value at location row column of the image img
  • mysql 配置停止于“启动服务器”

    我正在我的 Windows 8 机器上安装 MySQL 安装程序 在服务器配置过程中 它卡在 启动服务器 处并且不再移动 相同的日志是 Beginning configuration step Stopping Server if nece
  • 在 JavaScript 中使 forEach 异步

    我试图了解异步编程 Node js 但在这段代码上停滞不前 此函数在其回调中返回目录中的文件数组 function openDir path callback path dirname path fs exists path functio
  • 从方法中获取恒定的错误值

    我有 3 个问题 private static int NUMBER OF QUESTIONS 3 static boolean answer new boolean NUMBER OF QUESTIONS static boolean c
  • 使用 Google Apps 脚本将 Google 表单问题添加到表单的特定部分

    如果之前已经回答过这个问题 我深表歉意 但我已经进行了广泛的研究并且发现不足 我正在尝试向已存在的 Google 表单的各个部分添加一些问题 我知道如何添加新问题 form addTextItem 但这会将其附加到表单的末尾 我还知道如何获
  • 如何在 Perl 中替换日期?

    perl pi back e s 2013 07 31 05 54 14 2014 07 31 00 00 00 g tmp ranjan replace SEL 我正在使用上面的衬里来替换日期2013 07 31 05 54 14 to
  • 在设计时显示 MultilineStringEditor 来编辑编辑控件的行?

    我正在跟进这篇 C 文章了解如何创建 ActionList 和操作项 但是本文仅关注 类型的操作项DesignerActionPropertyItem 我想创建一个类型的项目DesignerActionMethodItem调用必须打开一个方
  • Perl 中的电子邮件主题 MIME 编码。

    我正在尝试在 Perl 5 8 5 下发送主题行中包含非 ASCII 字符的电子邮件 我的简单示例使用单词 nderungen 德语元音变音 但主题行始终会显示为 nderungen 而不是正确转换 usr bin env perl use
  • 为什么双括号初始化要求 SerialVersionUID?

    public static List
  • 假错误? `在初始化之前使用的变量` 在 init() 中初始化期间

    抱歉举了个无意义的例子 试图简化它 但仍然不明白发生了什么 以下给了我Variable self greeting used before being initialized struct MyView View State var gre